Android进程和Service的保活,是困扰Android开发人员的一大顽疾。因涉及到省电和内存管理策略,各厂商基于自家的理解,在自已ROOM发布于都对标准Android发行版作为或多或少的改动,使得应用层程序在处理进程和Service保活问题上变的异常复杂,且很难兼容,因为说不定哪款手机或者哪个版本的省电策略发生改变,那么随之而来的就是进程和Service保活的差异。

在应用场景上,由于即时通讯应用(包括IM聊天应用、消息推送服务等)为了保证消息的全时、实时送达能力,必须要实现进程或Service的保活。而就这一看似不起眼的问题,实际处理起来,因为众多Android手机和Android系统版本的差异,让问题的处理充满了不确定性。
以小米手机为例,MIUI的神隐模式让很多IM和推送开发同行纠结不已:在MIUI深度休眠之后,默认会彻底断开后台应用的socket。但微信、QQ这样的应用,MIUI官方的帖子说了:给这2个应用特殊照顾。好吧,特殊照顾,普通的APP只能继续折腾了。
为什么我们的后台进程/Service会被结束掉?
我想到的是有三个方面:
Android系统内存回收机制;
各厂商对后台程序的一个管理制度(就是允许程序后台运行那个);
第三方软件的清理(360什么的)。
其中有的后台程序保护把程序结束的同时会把程序弄成停止状态,导致无法接收广播!
我们的保活方案有哪些?
1控制onStartCommand函数的返回值:
我对这个函数的理解是:当服务被异常终止时,是否重启服务?有些文章里面在用这个做保活时,修改的是flag,在我实际测试中是无效。有效的做法是直接返回参数。另外默认的flags值为0,是START_STICKY_COMPATIBILITY。
具体代码如下
@Ove

Android进程和Service保活是即时通讯应用面临的主要挑战,由于各厂商省电策略不同,导致处理进程保活问题复杂且难以兼容。常见的保活方案包括控制onStartCommand返回值、在onDestroy中重启服务、提高服务优先级、使用守护进程等。然而,这些方法在面对不同设备和清理工具时效果各异,没有完美解决方案。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



