多进程模式的运行机制

Android为每个应用或者说每个进程都分配了一个独立的虚拟机,不同虚拟机在内存分配上有不同的地址空间,导致不同的虚拟机访问同一个类的对象会产生多份副本。例如不同进程的Activity对静态变量的修改,对其他进程不会造成任何影响。

所有运行在不同进程的四大组件,只要它们之间需要通过内存在共享数据,都会共享失败。运行在不同进程下的四大组件之间不可能不通过中间层来共享数据。

多进程会带来以下问题:

  • 静态成员和单例模式完全失效。
  • 线程同步锁机制完全失效。
  • SharedPreferences的可靠性下降。
  • Application会多次创建。

前两点都是因为不同进程不在同一个内存空间下,锁的对象也不是同一个对象。
SharedPreferences不支持两个进程同时去执行写操作,否则会导致一定机率的数据丢失,这是因为SharedPreferences底层是通过读/写XML文件实现的,并发写显然会出现一些问题,甚至并发读/写都会出现问题。
由于系统创建新的进程的同时分配独立虚拟机,其实这就是启动一个应用的过程,启动一个应用肯定会创建一个新的Application。

在多进程模式中,不同进程的组件拥有独立的虚拟机、Application以及内存空间。

运行在不同进程下的组件之间如果要共享数据的话,就要进行跨进程通信,Android实现跨进程通信的方式有很多:

  • Intent传递数据。
  • 共享文件和SharedPreferences。
  • 基于Binder的Messenger和AIDL。
  • Socket。

总结自:《Android开发艺术探索》

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器