• 进程与线程
    进程一般指一个执行的单元,也可以称作正在运行的程序实例线程是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 功能强大,支持网络传输数据流、支持一对多的实时通信 实现较繁琐 网络数据共享