IPC机制
/ / 点击 /- 进程与线程
进程一般指一个执行的单元,也可以称作正在运行的程序实例。线程是CPU进行运算调度的最小单元,它的系统资源是有限的,它是包含在进程之中。所以进程与线程是包含与被包含的关系。 什么是IPC?
IPC全称Inter-Process Communication,即进程间通信。一般应用采用多进程有是为了使应用能够获取更多的内存空间。由于一个进程对应分配一个虚拟机,进程与虚拟机的一一对应,造成我们对同一个类的对象在不同进程中就产生了对个副本,例如有processOne和processTwo两个进程,它们都有一个类A.class,那么在两个进程中的A.class是互不干扰的。总结起来对进程会造成一下几个问题:
1. 静态成员和单例模式失效;
2. 线程同步机制生效;
3. SharedPreferences可靠性降低(进程并发写可能异常)
4. Application多次创建(可以理解成Application的创建和进程的创建是一致的)Binder机制
Binder是android进程间通信的方式,Binder时基于C/S架构,主要有四部分组成:
1. Client(客户端进程)
2. Server(服务端进程)
3. ServiceManager(提供注册、查询和返回代理服务对象的功能)
4. Binder驱动(主要进程间的连接,进程间数据交互等基础底层操作)服务器通过Binder驱动在ServiceManager中注册服务
客户端通过Binder驱动查询Servicemanager中注册的服务
SreviceManager通过Binder驱动返回服务器代理对象
客户端拿到服务器的代理对象后即可进行进程间的通信IPC方式比较
优 | 缺 | 适用场景 | |
---|---|---|---|
Bundle | 使用简单 | 传输Bundle支持的数据类型 | 四大组件间的数据传递 |
文件共享 | 使用简单 | 不适合高并发,无法进行即时通信 | 用于实时性不高的场景 |
AIDL | 功能强大 支持一对多并发下的通信,支持实时 | 使用较复杂,需要做好线程同步问题 | 一对多通信且有RPC需求 |
Messenger | 功能一般,支持一对多串行通信,支持实时通信 | 不支持RPC、不能很好处理高并发、数据通过Message进行传输,只能传输Bundle支持的数据类型 | 低并发的一对多即时通信 |
ContentProvider | 在数据源访问上功能强大,支持一对多的并发数据共享,可通过call操作扩展其他操作 | 提供数据源的CRUD操作 | 进程一对多的数据共享 |
Socket | 功能强大,支持网络传输数据流、支持一对多的实时通信 | 实现较繁琐 | 网络数据共享 |
全文完。