先来看下方案内容
1 休眠的时候杀掉非白名单里面的进程--str方案
2 低内存时候杀掉非白名单里面的后台进程及限制后台进程数量
3 自定义三种等级的低内存杀进程策略以应对特殊场景,app端可以通过接口设置等级
第一级是 杀死所有后台进程,
第二级 杀死所有内存超过300mb的后台进程
第三级是 杀死所有cpu占用超过20%的后台进程
4 原有的低内存查杀等级上再细化查杀的力度,这个效果不是很明显,原生已经很成熟,目前 面临的问题主要还是特殊场景,条目三足以覆盖特殊场景
接下来看下大致实现思路
1 systemconfig.java 里面添加白名单并提供接口isStrApp(String packgename) 和静态接口 isStrMode();
2 ActivityManagerService.java监听screen_off和on广播 设置systemconfig.isStrMode()并实现进程查杀
(为什么不放到powermanagerservice里面,因为ams里面有现成的杀死进程的方法,而且较为复杂)
3 processlist.java 重写startProcessLocked方法在所有java进程启动的地方对str app 进行拦截。
再来看第二条的实现:
ActivityManagerService.java
updateOomAdjLocked里面直接当剩余内存小于低内存指标500mb时候杀死所有后台str app 并设置setProcessLimit = 5
看第三条的实现:
还是
updateOomAdjLocked 里面添加接口,并依次am添加接口给到app端调用,我这里简单用prop设置int值来控制了(代码在另一个仓库且要申请权限)