如何保证Service在后台不被杀死?

本文探讨了Android中保持Service持续运行的五种方法,包括修改onStartCommand返回值、提升Service优先级、设置前台服务等,以提高用户体验并确保应用活跃。

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

一、前期基础知识储备

(1)为什么要保证后台Service不被杀死

提高应用存在感。对于大厂的应用来说,其程序“活着”不是问题,但是为了带来更好的用户体验,提高用户粘性,就需要尽可能调用程序更多的服务,这样才能带来更多的用户体验(不一定更好,但是数量占优);对于小家来说,尽可能的让程序“活着”是它们的第一要务,通过后台服务的方式让应用存活在用户手机里也是一种存活的方式。

(2)后台Service真的可以不死吗

当然不行,任何应用的服务都是可以被杀死的,有系统直接杀死,也有用户直接杀死的,所以所谓保证Service不被杀死的实际含义——保证Service在杀死后可以立刻重启,称为“伪不死”状态。本篇文章总结了常见的5种保证“伪不死”的方法。

二、上代码,具体实现

修改onStartCommand(..)方法的返回值


通过对官方文档可知,修改onStartCommand(..)方法的返回值为START_STICKY可实现停止服务之后重启服务。

@Override
 public int onStartCommand(Intent intent, int flags, int startId){
  flags = START_STICKY;
  return super.onStartCommand(intent, flags, startId);
  // return START_REDELIVER_INTENT;
 }

提升service优先级

AndroidManifest.xml文件中对于intent-filter可以通过android:priority = "1000"这个属性设置最高优先级,1000是最高值,如果数字越小则优先级越低,同样适用于广播。

提升service进程优先级

Service尽管不依靠活动活着,但是依靠该应用的进程活着,如果应用进程关闭了,那么Service也要销毁,所以尽量提高Service依附的进程,也可以保证其生存状态。“前台可见进程服务于后台空进程”一共有6种进程,服务若想获得更长,可以设置为前台服务,依附于和用户交互的前台进程

onDestroy方法里重启service

 public void onDestroy(){
  Intent localIntent = new Intent();
  localIntent.setClass(this, MyService.class); // 销毁时重新启动Service
  this.startService(localIntent);
 }

Application加上Persistent属性:通过在androidmanifest.xml中的application标签中加入android:persistent="true" 属性后的确就能够达到保证该应用程序所在进程不会被LMK杀死。但有个前提就是应用程序必须是系统应用,也就是说应用程序不能采用通常的安装方式。必须将应用程序的apk包直接放到/system/app目录下。而且必须重启系统后才能生效。

小结:以上的方法实际上都只是做到了“伪不死”,并不会真的不死,用户手动强制停止,你一点办法都没有,所有的操作都是.in vain 所以做应用的人要在“实现服务”和“用户体验”之间,权衡清楚,毕竟任何应用的主人都是使用者。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值