Android通过共享用户ID来实现多个Activity进程共享
通过共享用户ID来实现多个应用程序使用同一个进程,这样也能使这些应用程序之间共享内存。
1. 同一Apk中的同一包中的多个Activity调用时进程状况验证
[1]创建Project:?
?? project name: FirstProject?
?? package ? ? : com.demo?
?? 默认Activity : MainActivity?
[2]添加一个新的Activity:?
?? name: SecondActivity?
[3]修改布局。在MainActivity布局中添加一个Button,当点击此Button时启动SecondActivity。在SecondActivity的布局中放置一个Textview,以证明SecondActivity已启动。?
[4]运行程序,查看此App进程情况:?
?? USER:app_36 ?PID:8360 ?NAME:com.demo?
[5]点击按钮,启动SecondActivity,再次查看进程情况:?
?? USER:app_36 ?PID:8360 ?NAME:com.demo
结论:进程列表没有变化,两个Activity运行在同一进程中。
2. 同一Apk中的不同包的Activity调用时进程状况验证
[1]将SecondActivity挪到包com.demo.second中去,相应修改AndroidManifest.xml中的name为:com.demo.second.SecondActivity?
[2]运行程序,查看此时进程情况:?
?? USER:app_36 ?PID:10593 ?NAME:com.demo?
[3]点击按钮启动SecondActivity,查看此时进程情况:?
?? USER:app_36 ?PID:10593 ?NAME:com.demo?
结论:进程列表没有变化,两个Activity运行在同一进程中。即进程name只受AndroidManifest.xml中manifset结点的package属性影响。
3. 同一Apk中Activity process属性修改后进程状况验证
[1]为SecondActivity添加process属性,其值为":abc",也可以随便是其他的":"开头的字符串,常见的名字是":remote":
<activity android:name=".MainActivity" android:label="@string/app_name" android:process="com.demo">
[2]运行firstProject、SecondProject,查看进程情况:?
?? ?USER:app_35 ?PID:21387 ?NAME:com.demo?
结论:两个Activity运行于同一个进程。
9.不同Apk,Share User Id相同,包名不同、签名key不同
经实验,安装第二个apk时会提示INSTALL_FAILED_UPDATE_INCOMPATIBLE错误,安装失败。?
总结:
UserId不同时:?
?? ?包名不同:
?? ? ? ?未设定process属性时,各自的Activity在各自的进程。即使process指定了包名,也不会和另一个用户的同名包共享进程。?
?? ?包名相同:?
?? ? ? ?签名相同:覆盖旧的同包名apk。签名不同:新的apk会安装失败。【签名key一般都是不同的】
UserId相同时:?
?? ?包名不同:
?? ? ? ?未设定process属性时,各自的Activity在各自的进程。process属性指定,则可以共享进程。?
?? ?包名相同:?
?? ? ? ?签名相同:覆盖旧的同包名apk。签名不同:新的apk会安装失败。【签名key一般都是不同的】