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

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


Service和Activity之间通信一般来说用的比较多的就是广播和Handler,今天来说一下怎么用Handler来实现两者之间的通信。

首先先来写Service这边: 
在onBind方法中:

    @Override
    public IBinder onBind(Intent intent) {
        Messenger messenger = new Messenger(mHandler);
        return messenger.getBinder();
    }
       
       
  • 1
  • 2
  • 3
  • 4
  • 5

当然我们肯定要有一个Handler:

Handler mHandler = new Handler(){
 @Override
        public void handleMessage(Message msg) {
           //do Something
            }   
};
       
       
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

先放这里,等下还有用。

再来看Activity: 
在onCreate中绑定上边的Service

  Intent intent = new Intent(this,DownLoadService.class);
  bindService(intent,mConnection, Service.BIND_AUTO_CREATE);
       
       
  • 1
  • 2
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) {

        }
    };
       
       
  • 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) {
           //do Something
            }   
};
       
       
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

下面回到Service中,来看handler:

 Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
                case MSG_BIND:
                    //获取绑定的Activity中的Messenger
                    mActivityMessenger = msg.replyTo;
                    break;
            }

        }
    };
       
       
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

这样 
Activity持有Service的Messenger

Messenger mServiceMessenger;
       
       
  • 1

Service持有Activity的Messenger

Messenger mActivityMessenger;
       
       
  • 1

这样就可以使用handler来进行通信啦 
注意: 
使用各自持有的对方的Manenger来send(msg),然后由对方的hanleMessage来作处理。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值