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) {
//do Something
}
};
先放这里,等下还有用。
再来看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) {
//获得service中的Messenger
mServiceMessenger = new Messenger(binder);
//创建Activity中Messenger
Messenger messenger = new Messenger(mHandler);
//创建消息
Message msg = new Message();
msg.what = DownLoadService.MSG_BIND;//只是一个flag 自己随意定义
msg.replyTo = messenger;
//使用service中的Messenger发送Activity中的Messenger
try {
mServiceMessager.send(msg); //在Service中就可以接收到Activity中的Messenger 用于Service与Activity之间的双向通信
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
//do Something
}
};
下面回到Service中,来看handler:
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
case MSG_BIND:
//获取绑定的Activity中的Messenger
mActivityMessenger = msg.replyTo;
break;
}
}
};
这样
Activity持有Service的Messenger
Messenger mServiceMessenger;
Service持有Activity的Messenger
Messenger mActivityMessenger;
这样就可以使用handler来进行通信啦
注意:
使用各自持有的对方的Manenger来send(msg),然后由对方的hanleMessage来作处理。
好啦 有不清楚的可以给我留言。