android实现进程间通信(IPC)的方式

一.使用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/

五.使用ContentProvider

六.使用socket

你可能感兴趣的:(android实现进程间通信(IPC)的方式)