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

编程入门 行业动态 更新时间:2024-10-11 15:18:39

如何保证Service在后台<a href=https://www.elefans.com/category/jswz/34/1771298.html style=不被杀死?"/>

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

一、前期基础知识储备

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

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

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

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

二、上代码,具体实现

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


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

@Overridepublic 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); // 销毁时重新启动Servicethis.startService(localIntent);}

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

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


更多推荐

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

本文发布于:2024-02-06 05:39:47,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1746881.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:不被   后台   Service

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!