美文网首页
Android笔记之Messenger

Android笔记之Messenger

作者: 卖梦想的男孩 | 来源:发表于2017-03-06 15:23 被阅读9次

Messenger是Android中跨进程通信的一种方式,是对AIDL的简化封装版,使用简单方便,相对透明,不用考虑脚本的生成的问题。

Messenger的使用

双端各持有一个Messenger,只需要在各自的Handler中捕获(handleMessage)自己关心的 消息即可
客户端通过ServiceConnection绑定服务端

服务端:

 @Override
    public IBinder onBind(Intent intent) {
        return mMessenger.getBinder();//返回消息所属的Binder
    }
    private Messenger mMessenger = new Messenger(new Handler() {
        @Override
        public void handleMessage(final Message msg) {
            switch (msg.what) {
                case MSG_TARGET:
                    Message replay = Message.obtain(msg);
                    replay.what = MSG_TARGET;
                    try {
                        msg.replyTo.send(replay);
                    } catch (Exception ex) {
                        ex.printStackTrace();
                    }
                    break;
                default:
                    super.handleMessage(msg);
            }
        }
    });

客户端:

    private Messenger mServerService;
    private Messenger mMessenger = new Messenger(new Handler() {
        @Override
        public void handleMessage(final Message msg) {
            switch (msg.what) {
                case MSG_TARGET:
                    //处理
                    break;
                default:
                    super.handleMessage(msg);
            }
        }
    });
     private ServiceConnection mConn = new ServiceConnection() {
        @Override
        public void onServiceConnected(final ComponentName name, final IBinder service) {
            if (service != null) {
                mServerService = new Messenger(service);
                Message msg = Message.obtain();
                msg.what = MSG_TARGET;
                msg.replyTo = mMessenger;
                try {
                    mServerService.send(msg);
                } catch (RemoteException e) {
                    e.printStackTrace();
                }
            }
        }

        @Override
        public void onServiceDisconnected(final ComponentName name) {
            mServerService = null;
        }
    };

IMessenger的原型(adil)

package android.os;  
import android.os.Message;  
/** @hide */  
oneway interface IMessenger {  
    void send(in Message msg);  
} 

参考:
http://blog.csdn.net/lmj623565791/article/details/47017485

相关文章

  • Android笔记之Messenger

    Messenger是Android中跨进程通信的一种方式,是对AIDL的简化封装版,使用简单方便,相对透明,不用考...

  • 第二章 IPC机制详解(3)

    本文为Android开发艺术探索的笔记,仅供学习 4.4 AIDL的使用 前面Messenger进程通信中,如果客...

  • Android服务之Messenger

    如需让服务与远程进程通信,则可使用Messenger为您的服务提供接口。利用此方法,无需使用 AIDL 便可执行进...

  • Android IPC之Messenger

    Messenger 翻译为信使,通过Messenger可以实现在不同进程间传递Message对象。Messenge...

  • 进程间通信

    Android 使用Messenger实现跨app通信

  • IPC之Messenger

    参考Android开发艺术探索 Messenger Messenger:信使,通过它可以不同进程中传递Messag...

  • 利用Messenger跨进程通信

    Android笔记多进程通信之利用Messenger跨进程通信, 提起跨进程通信,大多数人首先会想到AIDL,A...

  • Android Messenger

    service 定义一个Handle处理从client传递过来的message 通过Handle可以new一个se...

  • android IPC 通信之Messenger

    android 中进程间通信,比较常用的有以下五种方法,intent,共享文件,Messenger,AIDL,so...

  • Android IPC通信之Messenger

    Messenger可以译为信使,顾名思义,可以通过它在不同进程中传递Message对象,在Message中放入我们...

网友评论

      本文标题:Android笔记之Messenger

      本文链接:https://www.haomeiwen.com/subject/rxqugttx.html