跨进程通信(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信息;
使用服务:
Client进程根据获取到的Binder对象(例如Messenger对象),通过Binder驱动 建立与Server进程的通路,实现跨进程通信。