Android Service被系统回收的解决方法

搜了很多资料,大概有四种方法能实现service不被回收。

1.把service写成系统服务,将不会被回收。这个不靠谱,设置后没效果,据说必须是系统应用才行,也就是要设置ApplicationInfo.FLAG_SYSTEM|ApplicationInfo.FLAG_PERSISTENT,不知道怎么设置,有大神知道的麻烦告知。

2.提高service的优先级(未实践),设置android:priority="1000",还没有试过,不知道效果如何。

3.将服务写成前台服务foreground service(已实践,很大程度上能解决问题,但不能保证一定不会被杀)。这个方法比较靠谱。但是有个缺陷,出现的notification会一直显示在消息通知栏中,有强迫症的同学伤不起···

4.利用ANDROID的系统广播检查Service的运行状态,如果被杀掉,就再起来。

利用的系统广播是Intent.ACTION_TIME_TICK,这个广播每分钟发送一次,我们可以每分钟检查一次Service的运行状态,如果已经被结束了,就重新启动Service。但是有个问题,如果注册的是动态广播,这个广播的监听事件会随着context的销毁一起消失,不可行。如果是静态注册,可是Intent.ACTION_TIME_TICK这个广播又不支持静态注册。看来只能换一个系统广播来静态注册监听,目前还没想到能监听的系统广播,求大神告知。

总结:目前最好的方案据说是类似于微信,启动两个进程互相监视,如果有一个被关闭,另外一个马上启动之。这个方案还没试过,不知道具体怎么操作。第二选择方案就是上面提到的3,写成foreground service。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值