android messenger 可以实现比aidl轻量化的进程间通信

来源:互联网 发布:raphael.js绘制流程图 编辑:程序博客网 时间:2024/06/04 18:18

实现注意点:

1、

<service android:name=".MyService" android:process=":remote"     =》service要运行在其他进程

                <intent-filter>  <action android:name="com.myservice.action" />  </intent-filter>

</service>


2、发送自定义复合类型

// 发送

bundle.setClassLoader(SelfObject.class.getClassLoader());

bundle.putParcelable("self_object", new SelfObject());

msg.setData(bundle);

// 接收

bundle.setClassLoader(getClass().getClassLoader());

SelfObject so = bundle.getParcelable("self_object");

在相同应用,不同进程间;不同应用,不同进程间(自定义复合类型的路径、名称要一致),都可以正常传递


3、发送framework自带的、可以Parcelable序列化的复合类型,不需要设置ClassLoader,比如ContentValues类型


4、发送端发送Message时,在Message的replyTo成员变量中,设置receiveMessenger;

      接收端收到该message后,可以使用该receiveMessenger发送响应消息给发送端,实现交互。


5、framework层的AsyncChannel,就是封装了Messenger,可以实现不同进程间Handler之间的消息传递,使用的地方很多;

(Messenger实际上是对aidl的简单封装)


=》有些细节还不是很清楚,需要继续深入些


参考:

http://byandby.iteye.com/blog/1027705

http://blog.csdn.net/cs_lht/article/details/6698468

http://blog.csdn.net/wqunwang506/article/details/7927922

0 0