美文网首页
Leoric骷髅王保活方案阅读

Leoric骷髅王保活方案阅读

作者: 普通的程序员 | 来源:发表于2020-03-18 19:48 被阅读0次

    很久之前整理过一套完整的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

    有助于理解上一张图所说的进程关系。
    骷髅王的核心

    1. 使用native 层给 ams 发送 binder 消息拉起进程,5ms内快速创建进程
    2. 进程间感知死亡

    这里jni层,我就看不太懂了。
    https://github.com/tiann/Leoric/blob/master/library/jni/leoric.c

    https://www.jianshu.com/p/f75d4fa71686

    相关文章

      网友评论

          本文标题:Leoric骷髅王保活方案阅读

          本文链接:https://www.haomeiwen.com/subject/xpgcyhtx.html