Android 系统的进程保活方案的一些思路
Android 系统的进程保活方案是为了解决系统内存资源有限和功耗压力下,进程被系统查杀导致用户体验下降的问题。同时,三方应用为了常驻后台,采用了各种规避查杀的策略,进一步恶化了用户体验。为此,设计了以下保活方案,核心原理如下:
1.优先级调整(Adj调整)
最近使用的三个应用提升优先级:通过调整最近使用的三个应用的 adj(进程优先级),降低它们被杀的概率。
前台服务保活:检测前台服务进程是否被冻结,若被冻结则降级至 SERVICE_ADJ 等级,避免被系统查杀。
2.保活白名单机制
系统应用后台保活:通过保活白名单机制,允许系统应用在后台保活,并提供接口供应用主动请求或关闭保活能力。
从 Android O 版本开始,系统对后台应用拉起服务的能力进行了严格限制。只有满足以下 三个条件之一 的应用才能在后台拉起服务:
1.Persistent 应用:系统常驻应用。
2.后台白名单:被加入后台运行白名单的应用。
3.电池白名单:被加入电池优化白名单的应用。
如果应用不满足以上任一条件,则无法在后台拉起服务。
为了应对这一限制,新增了一个白名单机制,允许系统应用在后台拉起服务,绕过系统限制。该白名单专门用于提供系统应用的保活能力,确保关键服务在后台能够正常运行。
3.死亡监控与拉活
Binder 死亡回调监控:通过监控 Binder 对象的死亡回调,当应用进程异常退出时,自动拉活。
异常 Crash 处理:统计应用异常 Crash 次数,超过一定次数(如 10 次)后不再拉活,避免频繁拉活导致资源浪费。
4.拦截杀应用行为
查杀白名单:
1.通过白名单机制,拦截用户手动杀应用的行为,确保白名单内的应用不会被用户手动清理。
2.通过白名单机制,拦截系统杀应用的行为(例如CPU高负载查杀),确保白名单内的应用不会被用户手动清理。
5.测试与验证
优先级提升验证:通过命令行查看最近使用的三个应用的 adj 值,确保优先级提升成功。
拉活功能验证:通过杀死进程并监控其是否被重新拉起,验证拉活功能的有效性。
拦截用户杀应用验证:通过手动清理应用并检查进程是否存活,验证拦截功能的有效性。
6.总结
该保活方案通过优先级调整、白名单机制、死亡监控与拉活、拦截杀应用行为等多种手段,确保系统应用和关键进程在后台的存活,提升用户体验。同时,通过保活白名单机制和异常 Crash 处理,避免滥用保活能力导致系统资源浪费。