【Android开发坑系列】如何让Service尽可能存活
流行的思路如下【2015-11-20更新】:
1.让Service杀不死。Service的onStartCommand返回START_STICKY,同时onDestroy里面调用startService启动自身。
2.让Service从后台变成前置。在Android 2.0以前有效,借助setForeground(true)。
3.让某个进程不被系统的low memory killer杀死(如数据缓存进程,或状态监控进程,或远程服务进程)。add android:persistent="true" into the <application> section in your AndroidManifest.xml 。切记,这个 不可滥用,系统中用这个的service,app一多,整个系统就完蛋了。 通过实验发现即使设置了这个属性,应用程序被force kill之后还是不能重新启动起来的,应该是只对low memory killer免疫。
4.提升Service优先级。在AndroidManifest.xml文件中对于intent-filter可以通过android:priority = "1000"这个属性设置最高优先级,避免Service被系统回收。
5.定时唤醒,通过AlarmManager。(在Android 4.0之前有效,4.0之后被强杀的APP无法唤醒 参考 http://www.android100.org/html/201305/06/2430.html)。
6.当应用升级之后,即使用户不点开APP,也要重启服务。因为升级APP时会发送ACTION_PACKAGE_RESTARTED,AlarmManager作为系统服务,会接受这个事件,然后startService。
7.让Service开机启动。不过现在很多手机会禁止开机启动。
8.守护进程。
参考1:http://www.bubuko.com/infodetail-474019.html
参考2:http://blog.csdn.net/hellogv/article/details/46765387
本博客所有随笔版权归博客园和kai.ma所有,欢迎转载,转载请保留:
- 出处:http://kaima.cnblogs.com
- 作者:kai.ma