Messenger跨进程通信基础用法
一、说明
- 某个Service 用来处理任务,将该Service置于其他进程执行,并使用Messenger与之通信。
- Messenger 串行处理消息,使用Binder跨进程
二、基本使用
- 在处理消息的Service中创建自定义Handler处理消息
在Manifest.xml中使用android:process = "com.example.activity.remote"指定Service与activity不在同一进程
private class MyHandler extends Handler{
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Bundle data = msg.getString(""msg);
//do something
}
}
- 在Service中创建Messenger,并在onBind()方法返回
private final Messenger messenger = new Messenger(new MyHandler());
//bindService 的回调方法返回
@Override
public IBinder onBind(Intent intent) {
return messenger.getBinder();
}
- 在需要与Service通信的地方创建onServiceConnection,并进行bindService
Messenger messenger;
private ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
Log.i("TAG","Service is disconnected!");
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.i(TAG,"Service is connected!");
messenger = new Messenger(service);
Message msg = Message.obtain();
Budle data = new Bundle();
data.putString("msg", "Message");
msg.setData(data);
try {
//消息发送
messenger.send(msg);
} catch (RemoteException e) {
e.printStackTrace();
}
}
};
Intent intent = new Intent();
intent.setClass(this, Service.class);
bindService(intent, conn, Context.BIND_AUTO_CREATE);