进程保活 :就是想让进程在内存中永远存在,怎么杀都杀不死,就算杀死了也能自动启动。
一、Android进程的优先级
1.前台进程 :处于前台正在与用户进行交互的Activity,或者在前台绑定的Service。
2.可见进程 :可见但不可交互的Activity。
3.服务进程 :在后台开启的Service就是服务进程。
4.后台进程 :当处于前台的Activity,被按下Home键之后,该Activity会变成后台进程,但后台进程不会被立马销毁,系统会根据内存情况进行相应的回收。
5.空进程 :表示没有活跃的组件,只是出于缓存的目的而保留,可被随时收回。
前三个进程在内存足够的情况下是不会被回收的;而后台进程和空进程系统会比较随意地回收。
二、进程的回收策略
1.Low memory killer :通过一些比较复杂的评分机制,对进程进行打分,然后将分数高的进程判定为bad进程,杀死并释放内存。
2.OOM_ODJ :判别进程的优先级,当OOM_ODJ越小的时候,进程的优先级越高,越不会被系统回收。
三、进程保活方案
1.利用系统广播拉活
如开关机、网络连接、SD卡卸载之类的。
缺点 :当进程被系统禁用时无效,无法控制拉活时间。
2.利用系统Service机制拉活
在Service中有一个onStartCommand()方法,如果返回设为START_STICKY,当进程因为内存不足而被系统杀掉之后,在未来的某个时间段内,当系统内存足够用的情况下,系统会尝试创建这个Service。
缺点 :进程短时间内被杀死三次以上,就不能轻易拉活了。进程被root权限杀掉也不能拉活。
3.利用Native进程拉活
利用Linux中的fork机制,创建一个native进程,监控主进程,当主进程被杀死,native进程就可以对主进程进行拉活。
缺点 :在Android 5.0之后失效。
网友评论