Android Service 使用注意点

681 阅读2分钟

AndroidService的保活一直是一个永远的话题,此篇文章并不探究保活,而是探究服务被杀死又重启后的注意点。 为了让应用更不容易被杀死,我们采用前台服务,且在onStartComment返回 STICK_KEY

前台Service之死

开发一个小小的应用,使用了一个前台服务,应用称之为A 应用,前台服务称之为 BService。 将应用安装到设备后,前台服务启动,按下电源键,息屏。(一个只有3G内且系统为Android9的设备)。在夜深人静之时,设备感觉自己的内存不足了,开始杀应用了。A 应用也被看上了,然后被杀了。但是 A应用是开了前台服务的,且返回的是STICK_KEY,卑微的留下一条请求信息,请设备在内存充足的情况下,让他重生一次。

Service 的重生

过了端时间,设备发现内存充足了,想起了A应用的BService 的请求,于是就将BService 复活了。BService 一复活就又准备开始大干一场了,后台连接起来,广播注册起来,打算把之前没干完的事情继续干完。BService 用了多个静态对象保存了之前干的事情,复活后就打算读取这些对象,然后。。。,BService 发现 ,what,什么记录都没了!BService 遗忘了之前干的所有活,只能将所有事情都从头干一遍。

结论

Service 在被系统杀死的时候,其整个应用都将被杀死,整个应用的内存都被回收,而当Service 再次被AMS重新创建时,整个应用也是重新被创建了。所以,一切之前应用内的不管是静态变量还是其他,统统完全没有。因此 Service 开发始终需要注意一点,那就保持其独立性,尽量不要去持有其他组件内创建的变量,这些变量在应用都被杀死的情况下肯定都是null的