(三十七)进程保活面试问题

进程保活 :就是想让进程在内存中永远存在,怎么杀都杀不死,就算杀死了也能自动启动。

一、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之后失效。

你可能感兴趣的:((三十七)进程保活面试问题)