作者:书友34043247 | 来源:互联网 | 2023-07-11 15:05
前言本文中所讲的保活,并非之前所做的无论用户怎么折腾都还能常驻后台的保活,只是指在用户不主动杀进程的情况下,能保持服务长存的方案。公司的做的是B2B的产品,部分业务必须要及时的通
前言
本文中所讲的保活,并非之前所做的无论用户怎么折腾都还能常驻后台的保活,只是指在用户不主动杀进程的情况下,能保持服务长存的方案。
公司的做的是B2B的产品,部分业务必须要及时的通知用户,在Android5.0之前还好,毕竟保活的方案不少,而且不少手机rom对后台服务的管控也并不是很严格(某些机型除外),然而现在,一言不合就是杀进程,虽然作为手机用户的体验更好了,但是作为开发者却头疼万分,因为leader是不会给你谈体验的,只会问你能不能做到,人家QQ、360、微信都能保活,为啥你不能(呵呵......)。
保活探索
一、进程守护
这个应该是大家之前最常用的解决方案了,最简单的就是双进程service通过广播进行守护,在nexus5机型的5.0.1上用过,有效果,但是效果很一般,更不要说在现在的机型上了。后来,就有想到网上通过jni将子进程变成孤儿进程由init进程领养的方案,做了简单的demo测试,发现5.1以上依旧不行......
二、无声音频
之前听说在上古时期,迅雷就是由播放无声音频的方案来实现在IOS上后台下载的功能的,让系统认为用户在同音乐,所以保留当前进程。套用此方案,竟然发下在华为荣耀8上竟然可用,但是需要有播放声音的间隔控制(无声音频播放间隔>5s,依旧会被Kill),不幸的是,在同事的某台华为4.4手机并不能成功实施,只能在黑屏之后强行续命5分钟.......后来查了下,在网上还能找到某些版本的rom杀qq音乐的记录,可见白噪声最多也只能续命了。
三、前台页面
使用前台页面进行保活完全是个意外,应为在测试的时候我们发现一个规律,当app处于前台时,无论发生什么情况(异常除外),该app都会活下去。所以我们对app前台处理分两种:1、正常情况下,会有一个信息浮框展示在页面(本身就是客户需求)。2、增加亮屏熄屏广播监听,熄屏时,服务会拉起一个透明页面,亮屏时,会finish掉透明页面。当然,也有无声音频续命(部分机型上缺少亮屏广播,比如海信的某型号......),原理自然也就是前台进程,优先级最高了。
在测试的20种机型上,都能做到进程保活,当然,为了用户体验,我们也做了一些优化(1、无声音频长度与间隔长度。2、在无屏幕广播机器上的轮询机制管理。3、由用户选择是否开启进程保活......)
四、其他方案
中间过程中,我们考虑了其他的方案,比如:电话提醒、短信提醒、白名单......电话和短信并不是所有用户都愿意使用的,白名单又因为国内定制系统过多,最终作罢。