第2章-IPC机制

Posted by 程序亦非猿 on 2016-06-30

// todo 尚未完成

前言

IPC是 Inter-Process Communication的缩写,含义为进程间通信或者跨进程通信是指两个进程之间进行数据交互的过程.

在Android系统中IPC非常非常重要,需要掌握!!!

  1. 线程是 CPU调度的最小单元,同时线程是一种有限的系统资源,而进程一般指 一个执行单元,在PC和移动设备上指一个程序或者一个应用.
  2. 一个进程可以包含多个线程,一次进程和线程是 包含和被包含的关系
  3. Linux上可以通过 命名管道 共享内容 信号量等进行进程间通信,而在Android中使用Binder
  4. 四大组件可以通过android:process属性开启多进程模式(另外一个方式,在JNI里fork一个新进程)
  5. adb shell ps可以查看进程信息
  6. 每个进程都拥有独立的虚拟机

进程名指定方式有两种:
假设包名为me.yifeiyuan.android

  • 一种以:开头,表示在当前的进程名前加上包名,比如指定android:process=":remote",那么当前组件的进程名为me.yifeiyuan.android.remote,并且该进程属于当前应用的 私有进程,其他应用的组件不可以和他跑在同一个进程
  • 另一种是完整的方式,如指定为"com.a.b.remote",那么当前组件的进程名就是com.a.b.remote,其他应用通过sharedUID(每个应用的UID唯一)方式可以和它跑在同一个进程

多进程的问题

每个进程都分配 一个独立的虚拟机,不同的虚拟机在内存分配上有不同的地址空间,这就导致 在不同的虚拟机中访问同一个类的对象会产生多份副本.
也就是说只要是通过内存来共享数据,都会失败!

  1. 静态成员和单例模式完全失效(内存不共享了)
  2. 线程同步机制完全失效(同上,锁的不是同一个对象了)
  3. SharedPreferences的可靠性下降(SP底层通过读写XML文件来实现的,并发会出问题)
  4. Application会多次创建(当一个组件需要运行在新的进程里,系统需要在创建新的进程同时分配独立的虚拟机,也会创建新的Application,这就相当于启动一个应用,)