Android跨进程通信知识点汇总

跨进程通信(IPC)

1)管道Pipe:在内存中创建一个共享文件,利用共享文件传递信息。该共享文件并不是文件系统,只存在于内存中;只能在一个方向上流动;半双工通信;不存在同步问题,但存在传递数据量限制;
2)信号Signal:异步通信。信号在用户空间和内核空间之间交互,内核可利用信号来通知用户空间的进程发生哪些系统事件。不适用于信号交换,适用于过程中断控制;
3)信号量Semaphore:控制多个进程对共享资源的访问。主要是进程间以及同一进程不同线程之间的同步手段;
4)消息队列 Message Queue:存放在内存中并由消息对了标识符标识,允许一个或多个进程对它进行读写消息。信息会复制两次,不适用于频繁或信息量大的通信;Handler的实现基于此类机制;
5)共享内存Shared Memory:直接读写内核的一块内存空间。不需要进行数据拷贝,效率最高,但存在数据量限制和并发问题;
6)套接字Socket:不同机器之间进程间通信。

Android跨进程通信

1) Bundle:实现了Parcelable接口,常用于Activity、Service、BroadcastReceive之间的通信;只能传输Bundle类型数据
2)文件共享:常用于无并发,交换实时性不高的数据;
3)Messenger:低并发的一对多即时通信。串行的方式处理Client发来的消息,只能传输数据,不能进行方法调用(RPC)
4)ContentProvider:存储和获取数据,不同程序之间共享数据。一对多的数据共享
5)AIDL:后续详解;
6)Socket:网络数据交换,多设备跨进程通信;
除去 Socket,其他的都是基于 Binder 机制实现的。

Binder机制

https://blog.csdn.net/carson_ho/article/details/73560642
注册服务:Server进程 通过 Binder驱动 向ServiceManager进程 注册服务;Server进程创建一个Binder对象,保存Server进程与ServiceManager的信息;(内存映射)
获取服务:Client进程 通过 Binder驱动 向ServiceManger获取需要调用的Service信息;

image.png

使用服务:Client进程根据获取到的Binder对象(例如Messenger对象),通过Binder驱动 建立与Server进程的通路,实现跨进程通信。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。