Android开启多进程和因为虚拟机不同存在的问题
2018-01-26 20:43
901 查看
借鉴自开发艺术
开启一个额外进程的两个方法
1.在注册文件中给Activity指定process
2.通过JNI在native层去fork一个新进程
开启多进程的实战
有个注意点,默认包名的进程名是包名,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也会被重新创建
开启一个额外进程的两个方法
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也会被重新创建
相关文章推荐
- android拍照后图片路径的获取(解决不同手机存在拍照后旋转的问题)
- android studio在ADMcpu的电脑上无法开启虚拟机的问题
- Android Studio开启虚拟机遇到HAX kernel module is not installed问题
- openswan在NAT环境且开启DPD时双方SA生存周期不同可能存在问题
- openswan在NAT环境且开启DPD时双方SA生存周期不同可能存在问题
- android调用系统相机和相册进行拍照裁剪处理,解决不同安卓版本存在无法加载相册的问题,处理了是否有sd卡的存在的情况
- 解决用虚拟机或者公司网络下载android源码,遇到DownloadError: android.googlesource.com: <urlopen error [Errno 110] Connection timed out>的问题
- Android 资源国际化问题(3): 不同像素的手机
- android中不同手机分辨率适配问题
- Android的HttpClient和WebView session不同的问题
- java.lang.NoSuchMethodError问题处理(同一类型的jar包有不同版本存在)
- 配置android虚拟机的中文路径问题: PANIC: Could not open:
- android中不同手机分辨率适配问题
- Android JIT带来的虚拟机崩溃问题及解决方案
- 解决不同版本的eclipse或sdk所导致的android layout xml无法显示的问题
- android菜鸟学习笔记.关于虚拟机里面的ubuntu 文件夹共享给windows XP的拷贝不出来的问题
- Android的HttpClient和WebView session不同的问题
- 安装APK文件到Android虚拟机以及db.exe文件和AdbWinApi.dll文件的问题
- S3C6410的双Framebuffer于Android系统中存在的问题
- Android市场存在“分裂”问题