1、问题
系统为什么会Kill进程?Kill进程为什么是自己的?有什么规则?
在内存不足时,而其它更急于为用户提供服务的进程又需要内存时,Android可能会决定在某一时刻关闭某个进程。决定终止哪个进程,系统根据进程的优先级(oom_adj),根据内存的紧张程度,先把优先级低(oom_adj值大)的进程kill,以保证其它进程有足够的内存使用。
2、Android进程
2.1 Zygote进程
Android所有进程包括SystemServer都是由此进程Fork。
2.2 App进程
由Zygote进程Fork出来,并受AMS(ActivityManagerSerivce)管理。进程名以包名命名。
2.3 App辅助进程
允许App有多个进程,在AndroidManifest.xml的android:process属性设置,进程名格式packageName:name。
2.4 Native进程
通过C/C++开发的程序,也是由Zygote进程Fork出来,但它不受AMS管理,自由度更大。
3、Android进程优先级
进程的优先级是在com.android.server.am.ProcessList
类里边定义
主要分以下几个优先级
UNKNOWN_ADJ = 16
预留的最低级别,一般对于缓存的进程才有可能设置成这个级别。
CACHED_APP_MAX_ADJ = 15
缓存进程,空进程,在内存不足的情况下就会优先被kill。
CACHED_APP_MIN_ADJ = 9
缓存进程,也就是空进程
SERVICE_B_ADJ = 8
不活跃的进程
PREVIOUS_APP_ADJ = 7
切换进程
HOME_APP_ADJ = 6
与Home交互的进程
SERVICE_ADJ = 5
有Service的进程
HEAVY_WEIGHT_APP_ADJ = 4
高权重进程
BACKUP_APP_ADJ = 3
正在备份的进程
PERCEPTIBLE_APP_ADJ = 2
可感知的进程,比如那种播放音乐
VISIBLE_APP_ADJ = 1
可见进程
FOREGROUND_APP_ADJ = 0
前台进程
PERSISTENT_SERVICE_ADJ =