一.使用bundle
当我们在一个进程中启动了另一个进程的activity、service、receiver,我们就可以在bundle中附加我们需要传输给远程进程的信息并通过intent发送出去。
我们传输的数据要必须能被序列化.
以上原理都是bundle
当然service也是支持通过intent启动来传递数据的
这种方案是一种最最简单的进程间通信
二.使用文件共享
三.使用Messenger
1.简介
Messenger的底层是aidl
2.Aidl和messager的区别
原因是AIDL可以处理多线程、多客户端并发访问的,而Messenger只能是单线程处理。
Messenger、AIDL、Binder这三个东西的关系是这样的: AIDL是对Binder的封装,Messenger是对AIDL的封装,就是为了更好的方便开发者在不同场景下使用进程间通信。
四.使用AIDL
1.aidl的基础
aidl常常基于绑定服务,aidl底层是binder
绑定服务不属于跨进程,所以不要和aidl混合起来使用,只是说ipc时如使用aidl方式常常使用绑定服务。
2.aidl原理
基于proxy_stub模式说明,具体参以前博客。
3.具体流程
!!!其实最核心的是aidl接口的定义。
服务端
1. 服务端首先要创建一个service用来监听客户端的链接请求
2. 然后创建一个aidl文件,将暴露给客户端的接口在这个aidl文件中声明。
3. 最后在service中实现这个aidl即可。
客户端
1. 客户端所要做的事情就稍微简单一些,首先需要绑定服务端的service,
2. 绑定成功后,将服务端返回的binder对象转成aidl接口所属的类型,
3. 接着就可以调用aidl中的方法了。
上边描写的只是一个感性的过程,aidl的实现过程远不止这么简单。
4.一个例子
见:
https://github.com/zhujainxipan/MyApplication
http://android.jobbole.com/80789/