美文网首页Android
进程保活方案

进程保活方案

作者: 低调的大雄 | 来源:发表于2018-04-20 21:56 被阅读847次

    一.保活的两个方案

    A.提供进程优先级,降低进程被杀死的概率。

    B. 在进程被杀死后,进行拉活。

    必须先了解一下进程优先级,提高进程的优先级,应用存活的概率越大。

    进程的重要性,划分5级:

    1. 前台进程(Foreground process)

    2. 可见进程(Visible process)

    3. 服务进程(Service process)

    4. 后台进程(Background process)

    5. 空进程(Empty process)

    这里主要说一下前台进程,也就是用户当前操作所必需的进程。通常在任意给定时间前台进程都为数不多。只有在内存不足以支持它们同时继续运行这一万不得已的情况下,系统才会终止它们。

    前台进程一般为拥有下面的这些特点:

    A. 拥有用户正在交互的 Activity(已调用 onResume())

    B. 拥有某个 Service,后者绑定到用户正在交互的 Activity

    C. 拥有正在“前台”运行的 Service(服务已调用 startForeground())

    D. 拥有正执行一个生命周期回调的 Service(onCreate()、onStart() 或 onDestroy())

    E. 拥有正执行其 onReceive() 方法的 BroadcastReceiver

    二.A方案:提供进程优先级

    1.利用 Activity 提升权限

    方案设计思想:监控手机锁屏解锁事件,在屏幕锁屏时启动1个像素的 Activity,在用户解锁时将 Activity 销毁掉。注意该 Activity 需设计成用户无感知。

    2.Notification 提升权限

     方案设计思想:Android 中 Service 的优先级为4,通过 setForeground 接口可以将后台 Service 设置为前台 Service,使进程的优先级由4提升为2,从而使进程的优先级仅仅低于用户当前正在交互的进程,与可见进程优先级一致,使进程被杀死的概率大大降低。

    三.B方案:进程死后拉活

    1.利用系统广播拉活

    方案设计思想:在发生特定系统事件时,系统会发出响应的广播,通过在 AndroidManifest 中“静态”注册对应的广播监听器,即可在发生响应事件时拉活。

    2.利用第三方应用广播拉活

     方案设计思想:该方案总的设计思想与接收系统广播类似,不同的是该方案为接收第三方 Top 应用广播。通过反编译第三方 Top 应用,如:手机QQ、微信、支付宝、UC浏览器等,以及友盟、信鸽、个推等 SDK,找出它们外发的广播,在应用中进行监听,这样当这些应用发出广播时,就会将我们的应用拉活。

    3.利用系统Service机制拉活

    方案设计思想:将 Service 设置为 START_STICKY,利用系统机制在 Service 挂掉后自动拉活。

    4. 利用Native进程拉活

    方案设计思想:利用 Linux 中的 fork 机制创建 Native 进程,在 Native 进程中监控主进程的存活,当主进程挂掉后,在 Native 进程中立即对主进程进行拉活。

    主要原理:在 Android 中所有进程和系统组件的生命周期受 ActivityManagerService 的统一管理。而且,通过 Linux 的 fork 机制创建的进程为纯 Linux 进程,其生命周期不受 Android 的管理。

    5.利用 JobScheduler 机制拉活

    方案设计思想:Android5.0 以后系统对 Native 进程等加强了管理,Native 拉活方式失效。系统在 Android5.0 以上版本提供了 JobScheduler 接口,系统会定时调用该进程以使应用进行一些逻辑操作。

    6.利用账号同步机制拉活

    方案设计思想:Android 系统的账号同步机制会定期同步账号进行,该方案目的在于利用同步机制进行进程的拉活。

    四: 其他有效拉活方案

    经研究发现还有其他一些系统拉活措施可以使用,但在使用时需要用户授权,用户感知比较强烈。

    这些方案包括:

    1. 利用系统通知管理权限进行拉活。

    2. 利用辅助功能拉活,将应用加入厂商或管理软件白名单。

    这些方案需要结合具体产品特性来搞。

    上面所有解释这些方案都是考虑的无 Root 的情况。

    其他还有一些技术之外的措施,比如说应用内 Push 通道的选择:

    1. 国外版应用:接入 Google 的 GCM。

    2. 国内版应用:根据终端不同,在小米手机(包括 MIUI)接入小米推送、华为手机接入华为推送;其他手机可以考虑接入腾讯信鸽或极光推送与小米推送做 A/B Test。

    详细参考链接:http://geek.csdn.net/news/detail/95035

    相关文章

      网友评论

        本文标题:进程保活方案

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