ANDROID进程保活

作者: 凌空御风 | 来源:发表于2016-08-24 16:49 被阅读807次

    参考资料

    安卓保活大全

    保活手段

    Android闹钟设置的解决方案

    背景

    随着Android系统的不断升级以及各大厂商为了自身省电而深度定制,在退出应用或手机息屏或强制清除内存后,产品的提醒及桌面插件失效。而归其原因还是我们的后台提醒service被系统回收或强制清除了。那么如何保证我们的service不被回收killed而永生不死呢?答案是不可能的!!目前我们只能提高进程存活率,在进程被killed之后能够成功拉活(在不加入白名单的情况下无法完全保证,特别是小米、华为这种深度定制的手机)。

    保活手段

    可以参考保活手段安卓保活大全

    上面文章提到的黑色、白色、灰色保活方式。

    黑色保活:不同的app进程,用广播相互唤醒(包括利用系统提供的广播进行唤醒,其实这也是一种拉活的方式)。

    白色保活:启动前台Service。

    灰色保活:利用系统的漏洞启动前台Service。

    其中白色和灰色的体验经过测试都不太好,加上之后在通知栏会有“XX正在运行”的notification,影响用户体验。经过修改优化后的方式:

    在息屏时startForeground从而提高Service优先级,在亮屏时stopForeground恢复优先级从而消除通知栏notification。

    另外还有一种提高优先级的方式,监控手机锁屏解锁事件,在屏幕锁屏时启动1个像素的 Activity,在用户解锁时将 Activity 销毁掉。通过该方案,可以使进程的优先级在屏幕锁屏时间由4提升为最高优先级1。

    以上两种方式都能够提高service存活率,也是目前产品中在使用的保活措施。

    拉活措施

    所谓拉活,是指在进程已经被killed的情况下重新启动。

    安卓保活大全中也介绍了一些。

    1. 通过系统广播或第三方广播拉活。万年历中也采用这种方式,通过监听开机、网络、解锁等系统广播及个推广播拉活。(具体可参见WatchmenReceiver类)

    2. 利用系统Service机制拉活。即service中onStartCommand方法设置flags = START_STICKY;或者onDestroy中重新启动service。

    3. 守护进程,开源库Android-AppDaemon。但是经过验证在小米、华为手机中都无效。

    4. 以及JobScheduler和账号同步机制,但是这两种感觉限制较多(5.0及同步时),暂时未考虑。

    对于拉活措施现在产品中只是使用1、2两种方式,其他方式暂时未采用,而这两种方式对于forcestop的都没有作用。

    综上,目前的保活及拉活方式只是提高进程的存活率,无法保证service一直运行,为保证不被killed,加入白名单、自启动等才是王道!

    9月8号补充:双进程守护保证remote提醒进程存活率Daemon;这个对6.0以下版本有大效果!

    最近又把使用的保活手段整理了下,已上传至github------KeepAlive

    相关文章

      网友评论

        本文标题:ANDROID进程保活

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