使用Handler实现Service和Activity之间的双向通信

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来作处理。

好啦 有不清楚的可以给我留言。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/1d659f12709d93221ae40c30f1d64cba.html