【Android开发坑系列】如何让Service尽可能存活
2015-09-06 17:56
357 查看
流行的思路如下【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:/article/1456524.html
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:/article/1456524.html
相关文章推荐
- android Bitmap与string互转
- Android改变TextView中部分字体颜色
- Android实例-操作摄像头(XE8+小米2)
- Android IntentService完全解析 当Service遇到Handler
- Android Handler 四个使用实例 及HandlerThread的使用
- Speex语音压缩与解压在Android上的实现
- Android最佳实践之:StrictMode介绍
- Android HandlerThread 完全解析
- Android 图片压缩总结
- Android 亮度调节
- Android:自定义滚动边缘(EdgeEffect)效果
- Android 基于Message的进程间通信 Messenger完全解析
- Android开发实践:使用Service还是Thread
- Android开发实践:使用Service还是Thread
- Android源码分析-点击事件派发机制
- android开发之记录ListView滚动位置
- android开发之记录ListView滚动位置
- Android端OCR技术在身份证识别中的应用
- android新组件RecyclerView使用介绍和进阶使用,替用Gallery
- android开发之记录ListView滚动位置