您的位置:首页 > 移动开发 > Android开发

Android开启多进程和因为虚拟机不同存在的问题

2018-01-26 20:43 901 查看
借鉴自开发艺术

开启一个额外进程的两个方法

1.在注册文件中给Activity指定process

2.通过JNI在native层去fork一个新进程

开启多进程的实战



<activity android:name=".Main2Activity"
android:process=":good"/>
<activity android:name=".Main3Activity"
android:process=":com.example.test.good"/>


有个注意点,默认包名的进程名是包名,com.example.test

此外,:开头声明的进程是当前应用的私有进程,private的东西其他app无法访问,而下面那个.开头的是全局进程,其他app可以通过ShareUID方式和它运行在同一个进程,并且要求两个应用签名相同。如果两个应用签名相同并且ShareUID相同,就算他们没有跑在同一个进程中,他们可以共享各自的私有数据,比如data目录、组件信息,如果跑在同一个进程中,他们甚至可以共享内存数据。

但是实际上多进程开启是由很多问题的

比如一个UserBean中有一个静态变量,为1

在MainActivity中把它设置为2

在新的进程中打开Main2Activity,输出,发现还是1

因为他们是两个进程,也是两个虚拟机,都有不同的内存。而第二个进程也有UserBean,他在创建UserBean.class的时候,当然是根据java文件去创建的,所以还是1。

4大问题

静态成员 单例模式失效

线程同步无效,因为操作的不是一个线程了

SharedPreferences,两个进程不可同时写,不然有几率会丢失,同时读也可能存在问题

Application要多次创建,比如上面把activity声明到一个新进程里,自然所有的东西都要重新创建,application也会被重新创建
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐