你好,游客 登录 注册 搜索
背景:
阅读新闻

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

[日期:2017-05-22] 来源:Linux社区  作者:codenoodles [字体: ]

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

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

更多Android相关信息见Android 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=11

本文永久更新链接地址http://www.linuxidc.com/Linux/2017-05/144069.htm

linux
相关资讯       Handler  Service和Activity双向通信 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款