Android 7.0 Service保活总结

最近开发了个内部即时通信的app,可以说是真的蛋疼了,我几乎把整个保活的文章全部看了一遍,可以说android界真的是特别的鱼龙混杂。很多文章都写得很片面,容易形成很大的误导。我先说一个最近研究得出来的结论,在7.0或之后的版本,包括三星和国内的这些原生rom,如果不通过用户或厂家设置,至少service是绝对没有任何办法保活的,绝对,除非你还能找到未知的漏洞。虽然我也很头疼,但我真的很赞同谷歌这样的做法,不然天天收推送通知真的是恶心得不行,IOS也得手动去关。现在android可以说是将一切统统杀掉,然后把仅有的一丝权限,给予用户去设置,甚至app中连弹出授权的api都不会给你。最后也提供下目前消息实时push的解决方案。

1、jni保活,在5.0以前,android系统本身是不管理jni层的,所以用linux那套fork机制,可以让进程和app分开,就算关闭app也不会影响到。所以那时很多人说android非常的卡,幸运的是我那段时间用的ios,这些进程连用户都没法关掉,真的特别恶心

2、jobservice和alarmmanager,在5.0之后,连native层也会受到系统限制,比如之前可用的jni包活方式,也就是说无论是杀掉还是冻结,都只和你启动的第一个进程有关,后面不再以父子的关系去看待,而是以历史同组的关系去看待。这个历史同组真的是一个很关键的改变,其实不止killgroup的作用性,无论怎样写代码,都脱离不了系统对你app的控制,比如让你何时休眠之类的。说了这么多,那么jobservice和alarmmanager到底有什么用呢,其实在整个体系下,就可以看做是一个智能省电的定时器,其他没有任何特殊功能,和线程一样会受到运行管控

3、doze,doze是在android6.0的时候出现的,作用在锁屏之后,对app就行一系列的管理,可以说doze是一种底层机制。感觉doze还是很友好的,比如说提供白名单api、延迟执行的操作等等。就是说你每个app都会给你机会去发通知之类的,并且如果在app中授权ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS,doze就不会再去管你,也就是如果即时通信的话,加doze白名单后,如果没有monitor,就可以一直在后台刷数据

4、monitor,monitor可以看成是对doze的一种增强实现,也叫做厂商白名单,并且是对手机系统管理的一种实现,在绝大部分7.0的rom中都会有这东西,国产那几乎就是100%有了,可以看做是一个root权限的app。很多app之前一进去就弹窗进doze白名单,这样后台运行的app多起来又卡得不行,android又得背上这大锅。monitor就默认只允许白名单中的app后台运行和自启动,就算在doze白名单中也不行,并且不提供任何弹窗api授权,必须由用户在设置中手动加入白名单,或者找厂商给你加进去,比如QQ、微信、支付宝、搜狗这些

最后总结一下,那么从android7.0之后,到现在的android12,如何实现后台消息实时push呢?

1、引导用户操作,同时加入doze白名单和monitor白名单,必须两个都加入,app将一直在后台运行,那么就可以保持tcp的连接,就可以实时获取到服务器数据。切记发心跳,需要使用智能省电的定时器~~

2、和厂商对接,用钱解决一切,让厂商给你加doze和monitor白名单

3、通过厂商的api,对接推送,这种和ios思路一样,比如目前的华为、小米都有开发实时推送api,比ios恶心的就是需要对接多套。

这是目前实践过能用的方案,其他什么乱七八糟,利用漏洞和系统抢实间的这些就不说了,基本都被堵死了

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值