详解 Android IPC 机制(二)Android 中的多进程模式

详解 Android IPC 机制(二)Android 中的多进程模式
wshunli在 Android 中多进程指单个应用存在多个进程的情况。
开启多进程模式
在 Android 中开启多线程只有一种方法,即在 AndroidManifest.xml 中指定 android:process 属性。
<activity android:name=".MainActivity"> |
MainActivity 没有指定 process 属性,则运行在默认进程中,进程名为包名。
当启动 SecondActivity 或者 ThirdActivity 时,系统会为他们单独创建进程,
进程名分别为 com.wshunli.ipc.demo:remote 和 com.wshunli.ipc.demo.remote .
对于二者的区别,
前者 com.wshunli.ipc.demo:remote 代表应用私有进程,其他应用的组件不可与其在同一进程中。
后者 com.wshunli.ipc.demo.remote 代表全局进程,其他应用可通过 ShareUID 方式与其在统一进程中。
Android 系统会为每个应用分配一个唯一的 UID ,具有相同的 UID 应用才能共享数据。
两个应用通过 ShareUID 跑在同一进程中也是有要求的,需要两个应用有相同的 ShareUID 并且签名相同。
在这种情况下,可以互相访问对方的私有数据,看起来像一个应用的两部分。
多进程模式的运行机制
Android 系统为每个应用(或者说每个进程)分配一个独立虚拟机,在内存分配上也有不同的地址空间。
我们新建一个 UserManager 类,然后写一个静态变量。
public class UserManager { |
在 MainActivity 中将静态变量赋值为 2 ,然后在 SecondActivity 和 ThirdActivity 中打印出来,发现其值仍然是 1 。
所有运行在不同进程中的四大组件,只要它们之间需要通过内存来共享数据,都会共享失败,这也是多进程所带来的主要影响。
一般来说,使用多进程会造成如下几方面的问题:
(1) 静态成员和单例模式完全失效(不同的虚拟机)。
(2) 线程同步机制完全失效(不是同一块内存空间)。
(3) SharePreferences 的可靠性下降(底层通过 XML 执行操作,并发读/写都有可能出问题)。
(4) Application 会多次创建(启动新进程其实就是启动一个应用的过程,自然会创建新的 Application )。
public class MApplication extends Application { |
同一个应用的多线程相当于不同应用采用 ShareUID 模式。
参考资料
1、《Android开发艺术探索》 – 2.2 Android 中的多进程模式
2、Android 接口定义语言 (AIDL) | Android Developers
https://developer.android.com/guide/components/aidl
3、Android IPC机制(一)开启多进程 | 刘望舒的博客
http://liuwangshu.cn/application/ipc/1-process-start.html







