读书人

Android透过共享用户ID来实现多个Acti

发布时间: 2012-06-30 17:20:12 作者: rapoo

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一般都是不同的】

读书人网 >Android

热点推荐