关于service保活的思考

本文介绍了几种常用的安卓服务保活方法,包括控制onStartCommand的返回值、在onDestroy中重启服务、提高服务的优先级及使用静态广播监听等方式。这些方法能够帮助开发者提升服务在不同设备上的存活率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创造杀不死的service是一个比较流氓的行为,用户体验也不会好,通常我们只需要对服务做一定程度的保活。对于保活,比较烦的一点就是同样的措施在不同的手机上效果会完全不同,这和手机厂商的后台管理机制有关。我看了几篇文章,总结了几种常见的保活方式,当然,具体效果因机型而异。比如我的小米,不管用上什么方法,只要在menu中kill应用,服务就会停止。


1.控制onStartCommand的返回值

将此方法直接返回START_STICKY,可以使得服务在被kill后尝试重新创建服务。这个函数可以理解为,服务被异常终止后,要如何进行处理。

@Override  
public int onStartCommand(Intent intent, int flags, int startId) {  
    // TODO Auto-generated method stub  
    return START_STICKY;  
    //return super.onStartCommand(intent, flags, startId);  
}  


2.在onDestroy中重新启动

这个主要针对我们在设置中选择停止服务时,服务正常终止。这时服务会正常调用onDestroy,重启服务即可。(感觉比较流氓)

@Override
    public void onDestroy() {
        startService(new Intent(this,MyService.class));
        super.onDestroy();
    }


3.提高服务的优先级

这个主要针对的是系统的内存回收机制,优先级越高,越不容易被回收。服务的优先级高于未显示的活动,但低于前台显示的活动。可以通过setForeground将其设置为前台服务,从而提高优先级。

如果有root权限的话,还可以设置应用属性

android:persistent="true"

并将应用放入system/apps,这样应用成为了系统级,也就不容易被杀死了。


4.其他

还可以通过注册静态广播来监听亮屏锁屏等系统广播并唤醒服务做到保活

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值