android app模拟 persistent 属性可以保活且正常升级的一种方式

背景:
Android系统核心App和Service需要在Android开机期间一直后台运行,如果被杀死会立即重启。这个功能的实现是在App和Service的AndroidManifest.xml添加android:persistent="true"属性控制。但是Android 8.0之后含有Persist的App和Service禁止升级。如果我们把服务相关的App和Service设置android:persistent="true"属性就无法升级,如果不添加android:persistent="true"属性就无法保证一直运行会影响服务功能。所以需要设计一种新的机制保证后台服务不仅可以一直运行而且可以正常升级。
1.3 类型
调研报告为技术可行性调研,从方案对系统稳定性的影响和对需要保活的App和Service的综合讨论,后台需保活Service和App 启动由APP Store和Launcher完成,保活和升级等其他功能由Framework完成。
1.4 定义
AMS(ActivityManagerService):是Android Framework层的核心系统服务之一,负责App和Service的启动、删除和保活等工作。
PMS(PackageManagerService):是Android Framework层的核心系统服务之一,主要用于APP和Service升级和权限管理等功能。
APS(App Store和Launcher ):主要用于启动需要保活的后台Service和App。
Flag(persist.keep.alive):True表示保活后台Service,False表示不保活后台Service。
KAS:需要被保活的后台App和Service。
1.5 参考资料

说明:
1、列出要用到的参考资料(网站、书籍、已有项目资产)
2. 调研过程
2.1 思路介绍
保活思路借鉴了Android系统对Persist App保活的相关机制, AMS会解析要启动APP的相关权限,发现有Persist属性,就会添加到mPersistentStartingProcesses列表中,如果内存不足要杀死后台进程,会排除mPersist

你可能感兴趣的:(android)