Linux跨进程通行方式:
1、管道
2、消息队列
3、信号
4、共享内存
5、信号量
6、套接字
linux跨进程通信方式:
1、管道
2、消息队列
3、信号
4、共享内存 多个进程同时读写同一块内存空间
5、信号量
6、套接字
messenger usage
Binder
使用多进程的注意事项 :
为什么需要多进程?
进程与线程的区别。
调用connect()方法会导致双方阻塞,此时发挥aidl中关键字oneway的作用,但是一旦定义了oneway,该方法便不能设置返回值,表示不关心远端执行,必须设置为boid
定义aidl接口并在子进程服务中实现
在源代码目录下定义IConnetionService.aidl接口文件(src/main/aidl,与java同级)
build编译系统自动生成IConnectionServive.java实现类——其实是个interface(build/generated/下的out目录内)
在RemoteService中实现IConnectionService
(1)初始化IConnectionService对象为IConnectionService.Stub,这是IConnectionService的内部抽象类
(2)实现Stub中的方法
(3)onBind()方法返回connectionService.asBinder给主进程,这是一个IBinder对象
没有源码嘛
Message只能支持串行的实时通信
AIDL定义介绍
定义IPC过程中接口的一种描述语言
AIDL文件在编译过程中生成的实现类用于IPC通信
其语法支持基本数据类型,实现Parcelable接口的对象(还包括List和Map)
AIDL的本质基于Binder,实现IPC的方式
Binder应用的流程
Android中跨进程通信核心:Binder
C/S架构,稳定性好,优于共享内存方式
底层驱动基于内存映射,因此性能较好,整体数据拷贝一次,优于管道、消息队列、Socket的拷贝次数量
安全性高。通信过程中,双方的UID/PID可见
Linux跨进程通信方式
管道:确保对端存在,单向流动,
匿名管道:父子进程,兄弟进程,亲缘进程,基于内存中的缓存实现
有名管道
消息队列:支持随机查询(如特定的消息类型)
信号:内核存储发送(对中断机制弥补?不需要对方也在?)
共享内存:效率最高,需要同步机制
信号量:计数器(原子操作加减)、PV操作,进程间同步
套接字:C/S结构,网络通信
IPC进程间通信(Inter Process Communication):进程间通过内核提供的机制完成数据交换
多进程间数据共享失效,因此有几种进程间通信
系统资源不足会抛出OOM异常
进程与线程的定义
项目实战AIDL解决的问题
Messenger只支持串行通讯
AIDL 如何实现2MB以上的数据通信
撒打算打算打算打算借古讽今askdjhaksdhkasjhdkjashdkjshdkjshdkjashdkjshdkjhsdkjhsdkjhaskdjhaskdjhasjkfgsjhdzgfusjzgfjsujkjgzbiqukjasdghnik哇实打实大师达大厦大厦大厦啊啥的啊啊是啊的爱上阿斯顿撒打算打算打算上发现噶受到广泛发球文身断发文身断发猥琐点zfwesdzrfwesdzzrfdwessrd2 weasrd 2wased2 qweasd2 qwaed 2qw五色饭的五色东方卫视的粉色瑞典政府全额啊谁都想放弃啊饿死的消费维权啊是大润发撒打算打算打算打算借古讽今askdjhaksdhkasjhdkjashdkjshdkjshdkjashdkjshdkjhsdkjhsdkjhaskdjhaskdjhasjkfgsjhdzgfusjzgfjsujkjgzbiqukjasdghnik哇实打实大师达大厦大厦大厦啊啥的啊啊是啊的爱上阿斯顿撒打算打算打算上发现噶受到广泛发球文身断发文身断发猥琐点zfwesdzrfwesdzzrfdwessrd2 weasrd 2wased2 qweasd2 qwaed 2qw五色饭的五色东方卫视的粉色瑞典政府全额啊谁都想放弃啊饿死的消费维权啊是大润发