Android 进程的 优先级
- 前台进程
正在和用户交互 的act,前台运行的service,广播接受者的 onRecive 方法也是属于前台进程 - 可见进程
没有任何前台组件,但还是会影响用户屏幕上所见内容 - 服务进程
就是service,优先级比较高, 所以经常要注意service - 后台进程
- 空 进程
就是为了一个平衡,缓冲
Android 进程的回收策略
1 Low memory killer,其实是根据 Linux 的 oom 机制改过来的,oom 的比较复杂的平衡机制,会对进程的优先级进行打分,然后将分数高的进程视为bad 进程,杀死它,并释放内存。
而不同的是,oom 是在内存不足的时候采取检查,而 low memory killer 是 定时去检查
- OOM_ODJ 判别进程的优先级。
进程保活方案
利用系统广播拉活
在发生系统事件的时候,系统会发出相应的广播,我们可以注册这个广播监听器,比如 开机啊,文件的卸载啊
不好 知道这个监听
利用系统 Service 机制拉活
service 中有个onstartcommand 方法,把返回值 设为 start stikey,他以为因为内寸不足被系统杀掉后,在内存足的时候,系统会尝试创建这个 service。
第一次 10秒,第二次 20 秒。超过 三次,不再拉活
root 后还是可以直接杀掉的
利用Native 进程拉活
主要用的Linux 中的fork 机制创建一个 native 进程,而这个native 进程去监控主进程的存活,当主进程挂掉之后,由于native 进程活着,可以去拉活。
用的Android 的 ActivityMangerSerive 来管理。
5.0 之后 又被限制了
如何监听呢? 可以轮询 死循环 监听
可以去访问某个主进程文件 的锁,如果获得了锁,说明 主进程挂了。
如何拉活,AM 命令
利用JobScheduler 机制拉活。
上个 5.0 之后 限制了,但是提供了这个,可以想办法
利用账号同步机制拉活
会定期同步账号,利用这个机制,但是 好像也不生效了。