Android中android_process多进程的坑

来源:互联网 发布:windows toolkit 编辑:程序博客网 时间:2024/06/17 01:45
  在Android的帮助文档中我们可以了解到,一般情况下一个服务没有自己独立的进程,它一般是作为一个线程运行于它所在的应用的进程中。但是也有例外,Android声明文件中的android:process属性却可以为任意组件包括应用指定进程,换句话说,通过在声明文件中设置android:process属性,我们可以让组件(例如Activity, Service等)和应用(Application)创建并运行于我们指定的进程中。
好处:
1.给进程分配了独立的内存,避免了OOM。
2.分担主进程的内存压力。
坏处:
1.多进程开启时,Appliaction的onCreate方法被执行多次,导致重复初始化资源,增加了初始化时间,Android为每个进程分配了独立的虚拟机,所以我们不能直接将一些数据保存在Application中。
2.进程间的内存相互间是不可见的,不能用常规方法来共享数据库。
3.静态成员和单例模式完全失效(不是同一块内存,会产生不同的副本)
4.线程同步机制完全失效(不是同一块内存,所以对象也不是同一个,因此类锁、对象锁也不是同一个,不能保证线程同步)
5.SharedPreferences 可靠性下降(SharedPreferences不支持多个进程同时写,会有一定的几率丢失数据)
6.如果在新进程中要进行Umeng统计或分享等类似的第三方操作,需要重新初始化,并且分享很容易出现问题。
总结:
1.对于一些大图显示,详情页可以使用多进程来避免OOM,但是要尽量避免数据库操作和引用单例。
2.如果要操作SharedPreferences,可使用如下方式来创建,不过SharedPreferences不是线程安全的,所以使用要慎重。
SharedPreferences s = getApplicationContext().getSharedPreferences("UserData",Context.MODE_MULTI_PROCESS);
3.多线程间的数据共享,可以通过AIDL,Messenger或者ContentProvider来实现。可以参考
http://www.open-open.com/lib/view/open1473735422932.html
http://www.cnblogs.com/android-blogs/p/5816922.html
4.在新进程中,尽量减少单例、SharedPreferences以及第三方分享等操作。
1 0
原创粉丝点击