Service和Activity之间通信一般来说用的比较多的就是广播和Handler,今天来说一下怎么用Handler来实现两者之间的通信。
首先先来写Service这边:
在onBind方法中:
@Override
public IBinder onBind(Intent intent) {
Messenger messenger = new Messenger(mHandler);
return messenger.getBinder();
}
当然我们肯定要有一个Handler:
Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
}
};
先放这里,等下还有用。
再来看Activity:
在onCreate中绑定上边的Service
Intent intent = new Intent(this,DownLoadService.class);
bindService(intent,mConnection, Service.BIND_AUTO_CREATE);
ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder binder) {
mServiceMessenger = new Messenger(binder);
Messenger messenger = new Messenger(mHandler);
Message msg = new Message();
msg.what = DownLoadService.MSG_BIND;
msg.replyTo = messenger;
try {
mServiceMessager.send(msg);
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
}
};
下面回到Service中,来看handler:
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
case MSG_BIND:
mActivityMessenger = msg.replyTo;
break;
}
}
};
这样
Activity持有Service的Messenger
Messenger mServiceMessenger;
Service持有Activity的Messenger
Messenger mActivityMessenger;
这样就可以使用handler来进行通信啦
注意:
使用各自持有的对方的Manenger来send(msg),然后由对方的hanleMessage来作处理。
好啦 有不清楚的可以给我留言。