- 跨进程通讯(IPC)
消息队列:基于SystemV和Posix系统 优点异步,解耦,缓冲,缺点:比信号和管道更加重,队列数据有上限(一般16KB)
Android中代表handler,但handlerr只是进程内的通信方式 :由 消息轮询器(Looper)、消息队列(MessageQueue)、消息处理器(Handler)三部分组成,轮询器通过prepare()初始化消息队列,处理器通过队列的enqueMessage()将消息插入消息队列中,此时会唤醒轮询器,轮询器next()取出消息队列中的消息,当前消息的target(也即Handle)的dispatchMessage()分发给处理器处理, 参考探索Android消息机制
handle消息中的同步屏障消息会放行异步消息,同步消息需等待同步屏障消息执行完
Binder: android系统独有,AIDL,BroadCast,Content Provider都是基于Binder机制通信的,优点:解决并发安全,同时提升效率(一次数据拷贝),缺点:内存占用过多,使用太过复杂,而且数据传输量有限制,参考Binder机制
本质上就是C/S架构的共享内存的IPC机制,结构上是一种物理虚拟设备驱动,代码角度上讲实现了IBinder接口,也即实现了Binder机制,通过内存映射(mmap())达到拷贝一次数据即可通讯的目的,提升效率。由server端提供服务,client端使用服务,ServerManage管理服务,Binder驱动连接桥梁,三端都是通过Binder驱动间接相连
管道:基于Unix系统,PIPE指匿名管道:半双工单向通讯,只能在父子,兄弟进程间通讯,数据量小,但无并发问题;FIFO指有名管道:半双工双向通讯,对进程无限制,但需考虑并发;都是通过创建虚拟文件实现,只能接收字节流信息
android中代表Looper:使用pipe管道进行唤醒操作
信号:基于Unix系统,是一种软中断,发出信号后,有进程监听这个信号会接收到,没有则忽略
android中SIGKILL信号便是这一机制,用于在内核中捕获并处理
共享内存:效率最高,但有并发安全性问题,通过通过**shmget()函数申请共享内存,该内存不在内核区,可以存储的数据量大
android 中图形界面显示,使用匿名共享内存方式,通过mmap()**函数将申请到的内存映射到自己的进程空间