目的
进程保活是各个公司想要实现的一个功能,可以“无赖”地一直霸占你的手机,不被系统和第三方杀掉,以下是几种方案,供大家参考,具体实现还需自己完成。
基本思路
- 提升进程优先级,防止被杀掉
- 进程被杀掉之后进行拉活
进程优先级划分
1.前台进程
- 用户正在交互的Activity
- 当某个Service绑定正在交互的Activity
- 被主动调用的前台Service(startForeground)
- 组件正在执行生命周期的回调(onCreate/onStart/onDestroy)
- BroadcastReceive正在执行onReceive()
2.可见进程
- Activity处于onPause状态
3.服务进程
- 通过startService启动的service
4.后台进程
- Activity处于onStop状态
5.空进程
- 不含有任何四大组件的进程
Android 进程回收策略
Android 中对于内存的回收,主要依靠 Lowmemorykiller 来完成,是一种根据 OOM_ADJ 阈值级别触发相应力度的内存回收的机制。
关于 OOM_ADJ 的说明如下:
image.png
其中红色部分代表比较容易被杀死的 Android 进程(OOM_ADJ>=4),绿色部分表示不容易被杀死的 Android 进程,其他表示非 Android 进程(纯 Linux 进程)。在 Lowmemorykiller 回收内存时会根据进程的级别优先杀死 OOM_ADJ 比较大的进程,对于优先级相同的进程则进一步受到进程所占内存和进程存活时间的影响。
进程保活方案
1.提升进程优先级
- 监听手机的屏幕的解锁和锁屏事件,在手机锁屏时启动1像素的Activity,解锁时结束1像素的Activity
- 通过startForeground()提升到前台进程
2.双进程守护
- 开AB两个进程,互相监听,当A进程被杀死,B进程重新启动A进程
3.其他
- 使用JobScheduler,将任务添加进系统调度队列
- 将Service中onStartCommand的返回值设置为START_STICKY
- 利用BroadcastRecelver,监听系统的广播或第三方应用发出的广播
- 针对性的接入第三方推送,比如小米渠道下接入小米推送,华为渠道下接入华为推送,墙外App接入GCM
- 利用账号同步机制,系统会定期唤醒账户更新服务
- 通过各种手段加入手机系统的白名单
总结
现在手机对进程保活的问题做的越来越严格,所以有很多方法并不见效,本人也是不支持做项目的进程保活。试想如果每一个APP项目都进程保活,霸占你的手机内存,手机就会变得炒鸡卡,到头来难受的还是我们用户自己呀。
网友评论