您的位置:首页 > 移动开发 > Android开发

[置顶] Android Service通过Handler与Activity交互

2017-03-03 17:49 429 查看
activity代码

package com.app.yr.jnidemo;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Messenger;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.btnTest).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
handler.post(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(MainActivity.this, HandlerService.class);
intent.putExtra("messenger", new Messenger(handler));
startService(intent);
}
});
}
});
}

private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
((TextView) findViewById(R.id.tvHandler)).setText("this is a message from service");
break;
}
}
};

}


service代码

package com.app.yr.jnidemo;

import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
import android.support.annotation.Nullable;

public class HandlerService extends Service {
private Messenger mMessenger;
private Handler mHandler = new Handler();

@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (mMessenger == null) {
mMessenger = (Messenger) intent.getExtras().get("messenger");
}
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
Message message = Message.obtain();
message.what = 1;
try {
mMessenger.send(message);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}, 10000);
return super.onStartCommand(intent, flags, startId);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: