Leoric骷髅王保活方案阅读
很久之前整理过一套完整的Android 保活方案
主要集中在
1.提升进程优先级(oom_adj),降低被LMK机制杀死的概率
典型的方案有
- 监听SCREEN_ON/OFF广播
- 启动一像素的透明Activity
- 利用系统机制,启动空通知,提升fg-service
- 利用厂商rom特性,后台播放无声音乐
2.进程被杀后,重新拉起进程
方案有
- 监听系统广播拉起进程,notificationListenerService
- 第三方广播,如第三方推送sdk的广播
- 双进程互相拉起,开两个service
3.比较文明的请求用户给电量白名单。
这些方案已经写在
Android保活/拉活(一)教程检索
https://www.jianshu.com/p/b51e2dbf2311
Android保活/拉活(二)代码实现
https://www.jianshu.com/p/ce60fcedd3d6
现在遇到的问题是,force-stop,一锅端。
force-stop机制,详细说明了为什么这个AMS提供的功能, 可以做到一锅端,甚至株连。
http://gityuan.com/2016/10/22/force-stop/
维数大老提供了一个新的方案,要杀无所谓,只要能迅速孵化zygote一个新进程就行。
https://github.com/tiann/Leoric
库里提供了一篇解析腾讯Tim利用 监听文件锁的方式,6个进程相互拉活的文章。
说实话,我没看太懂,但是不妨碍先去了解。
http://gityuan.com/2018/02/24/process-keep-forever/
只需要先知道两个tim的两个核心思路
1.监听文件锁
2.产生4个进程(进程关系见图)
image.png
weishu的开源方案也有写文章,如果说太长不看,也没问题
http://weishu.me/2020/01/16/a-keep-alive-method-on-android/
重点:
image.png
有助于理解上一张图所说的进程关系。
骷髅王的核心
- 使用native 层给 ams 发送 binder 消息拉起进程,5ms内快速创建进程
- 进程间感知死亡
这里jni层,我就看不太懂了。
https://github.com/tiann/Leoric/blob/master/library/jni/leoric.c