我们做应用都希望自己的应用可以尽可能的存活,尤其是即时通讯应用,既要保证应用的存活,同时也要保证消息的实时性。所以我们无所不用其极,但是请合理看待应用保活和进程保活,合理使用,避免对于资源的浪费,导致用户忍痛放弃应用。
姑且不谈微信的保活技术,我们要明白如果想要让应用一直存活,我们需要知道是什么让我们的应用走上了消亡。
Scene 1:用户自行操作清理应用,开关机
解决办法:
监听开机广播,进程拉活,应用拉活
Scene 2:安卓系统性能优化清理应用
查看关于性能优化官方文档:
安卓6.0低电耗模式和应用待机模式(无需翻墙-中文版)
解决方案:
进程保活,进程瘦身,进程差异化,进程拉活
Scene 3:手机厂商性能优化清理应用
解决方案:
1.手机厂商白名单–>此项复杂程度很大
2.用户操作取消锁屏清理应用,开启电池管理白名单,应用自启白名单–>用户操作比较复杂,用户体验差
Scene 2和Scene 3都是放弃了安卓系统和手机厂商对于用户体验及手机性能优化的关闭,所以应用要自觉做好性能优化。
我们需要下功夫研究的就是进程瘦身,进程保活,进程拉活。进程瘦身对于不同的应用有不同的优化,所以下文主要讲进程的保活和拉活技术
进程保活
1. 1px Activity
适用范围:所有安卓版本,所有安卓机型
优点:极大的提高了进程优先级,增加了保活概率
缺点:开机广播监听慢或者未监听到,会导致极差的用户体验
实现方式:监听开关机广播,启动和清理1px Activity
2. 开启前台Service
适用范围:安卓版本小于24,所有安卓机型
优点:有效提高Service所在进程的优先级,可将进程优先级从7到2
缺点:6.0以上无法使用
细节解释:可以结合【 应用层双进程守护】使用,放在主进程的Service里
3. 与服务器保持长连接
适用范围:所有安卓版本,所有安卓机型
优点:有效的提升应用的唤醒
细节解释:大家都明白在中国无法使用GCM,所以一般的即时通讯都为伪即时通讯。我们只能使用自己的心跳包进行长连接
进程拉活
1. 应用层双进程守护
适用范围:所有安卓版本,所有安卓机型
优点:可以进行进程拉活
缺点:暂无
实现方式:两个进程service相互绑定启动
细节解释:两个service最好一个在主进程,一个在轻量进程,这样可以错开进程杀死时间,保证存活率
2.进程拉活JobScheduler
适用范围:安卓版本大于等于21,所有安卓机型
优点:可以在间隔时间内拉活应用
3.应用间进程拉活
适用范围:用户安装我们的多款应用
设置系统级应用
适用范围:仅限于设备是自己公司定制
以上进程保活和进程拉活的技术有大神已经进行了阐述,我就不重复造轮子了,请参考以下博客
参考博客:探讨Android6.0及以上系统APP常驻内存(保活)实现-争宠篇
参考博客:探讨Android6.0及以上系统APP常驻内存(保活)实现-争宠篇
参考博客:探讨一种新型的双进程守护应用保活方法
微信保活厉害的原因?微信用到的技术有进程保活,进程拉活,开机自启动,应用间互相拉活,有自己的推送服务(心跳包,可以做到唤醒应用),手机厂商白名单
作为一般应用,我们无法使用应用互相拉活,也不能够耗费大量的精力去申请手机厂商白名单,也无法做出一个完美的心跳机制