Android多进程总结1
前言
正常情况下,一个apk启动后只会运行在一个进程中,其进程名为apk的包名,所有的组件都会在这个进程中运行,以下为DDMS的进程截屏:
com.biyou.multiprocess为进程名,也是apk的包名,
但是如果需要将某些组件(如Service,Activity等)运行在单独的进程中,就需要用到android:process属性了。我们可以给android的组件设置android:process属性来使其运行在指定的进程中。
(1)AndroidMantifest.xml中的activity、service、receiver和provider均支持android:process属性
(2)设置该属性可以使每个组件均在各自的进程中运行,或者使一些组件共享一个进程
(3)AndroidMantifest.xml中的application元素也支持android:process属性,可以修改应用程序的默认进程名(默认值为包名)
为何要使用多进程
1.分散内存的占用
我们知道Android系统对每个应用进程的内存占用是有限制的,而且占用内存越大的进程,通常被系统杀死的可能性越大。让一个组件运行在单独的进程中,可以减少主进程所占用的内存,避免OOM问题,降低被系统杀死的概率,
2.实现多模块
比如我做的应用大而全,里面肯定会有很多模块,假如有地图模块、大图浏览、自定义WebView等等(这些都是吃内存大户),还会有一些诸如下载服务,监控服务等等,一个成熟的应用一定是多模块化的。
当我们的应用开发越来越大,模块越来越多,团队规模也越来越大,协作开发也是个很麻烦的事情。项目解耦,模块化,是这阶段的目标。通过模块解耦,开辟新的进程,独立的JVM,来达到数据解耦目的。模块之间互不干预,团队并行开发,责任分工也明确。
3.子进程奔溃,主进程可以继续工作
如果子进程因为某种原因崩溃了,不会直接导致主程序的崩溃,可以降低我们程序的崩溃率。
4.主进程退出,子进程可以继续工作
即使主进程退出了,我们的子进程仍然可以继续工作,假设子进程是推送服务,在主进程退出的情况下,仍然能够保证用户可以收到推送消息
5.实现守护进程
如果主线程中的服务要从开机起持续运行,若由于内存等原因被系统kill掉,守护进程可以重新启动主线程的服务。
通过JNI利用C/C++,调用fork()方法来生成子进程,一般开发者会利用这种方法来做一些daemon(守护进程)进程,来实现防杀保活等效果。
另外:
还能通过监控进程,将这个错误上报给系统,告知他在什么机型、环境下、产生了什么样的Bug,提升用户体验。
本文分享自 nginx遇上redis 微信公众号, 前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
- 前言
-
为何要使用多进程
-
1.分散内存的占用
-
2.实现多模块
-
3.子进程奔溃,主进程可以继续工作
-
4.主进程退出,子进程可以继续工作
-
5.实现守护进程
-
5.实现守护进程
-
4.主进程退出,子进程可以继续工作
-
3.子进程奔溃,主进程可以继续工作
-
2.实现多模块
-
1.分散内存的占用