1.Activity中绑定IntentService
Intent intent =new Intent(this, MIntentService.class);
bindService(intent, MainActivity.this, Context.BIND_AUTO_CREATE);
2.ServiceConnection 的 onServiceConnected 回调中使用服务端返回的 IBinder 构建 Messenger,并将Activity中维护的Messenger封装到Message中,通过binder传给服务端
@Override
public void onServiceConnected(ComponentName name, IBinder binder) {
System.out.println("onServiceConnected!");
Message message = Message.obtain();
message.replyTo =messenger;
try {
new Messenger(binder).send(message);
}catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
3.服务端维护一个Messenger,并在 onBind 中返回messenger.getBinder(),服务端可以通过Handler接收来自客户端的消息
@Override
public IBinder onBind(Intent intent) {
return messenger.getBinder();
}
private class IncomingHandlerextends Handler {
@Override
public void handleMessage(Message message) {
if (message.replyTo !=null) {
outMessenger = message.replyTo;
Log.d("MIntentService", "handleMessage outMessenger = " +outMessenger);
}
}
}
private Messengermessenger =new Messenger(new IncomingHandler());
4.onHandleIntent处理事件时服务端通过Handler接收消息中 message.replyTo 得到的Messenger发出事件
@Override
protected void onHandleIntent(Intent arg0) {
System.out.println("Service started");
outMessenger.send(Message.obtain());
}