Android四大组件之Service全面解析(二)
hello,大家好,我是阿杰,在上一篇博文中,阿杰给大家介绍了Service这个组件以及它的生命周期和它启动的方式,这一篇博文呢主要给大家讲一下如何防止Service被杀死。
1. 设置onStartCommand方法中的返回值
调用Context.startService方式启动Service时,如果Android面临内存匮乏,可能会销毁当前运行的Service,待内存充足时可以重建Service。而Service被Android系统强制销毁并再次重建的行为依赖于Service的onStartCommand()方法的返回值。我们来看一下究竟有哪些返回值:
- START_NOT_STICKY
这个返回值的意思是:当我们Service运行的进程被Android系统强制杀死的时候,不会在重新创建Service。就是说,只要Service被杀掉,这个Service就没了,只能重新startService来启动,这样Service又会重新实例化来进行一系列的操作。
- START_STICKY
这个返回值的意思是:当我们Service运行的进程被杀掉时,Android系统会把Service设置为运行状态,但是onStartCommand()方法中的Intent信息确被清空了,没有被保存,这个时候,Android系统会尝试创建Service,并且会执行onStartCommand()回调方法,但是onStartCommand()方法中的Intent信息却是为null了。
- START_REDELIVER_INTENT
这个返回值的意思是:和上一个返回值类似,当Service运行的进程被Android系统杀掉的时候,Android系统会重新创建Service,并且回调onStartCommand()方法,不同的是,这个返回值会保留最后一次传入的Intent信息,当Service重新被创建时,我们可以拿到这个Intent信息,从而进行操作。
2、提高Service进程的优先级
当系统进程控件不足时,系统会根据进程的优先级进行杀死回收。优先级越高,越不容易被杀死回收。
Android系统进程有6个等级,他们由低到高分别是:
- 空进程
- 内容供应节点
- 后台进程
- 次要服务进程
- 可视进程
- 前台进程
我们防止Service被杀死可以把Service放在前台进程,这样被杀死的几率会小很多。
3、提高Service优先级
在AndroidManifest.xml文件可以通过一个属性设置Service的优先级:
[code] <service android:name=".MyService"> <intent-filter android:priority="1000" /> </service>
1000是最高优先级,值越小,优先级越低。
阅读更多
- Android四大组件:Service服务史上最全面解析
- android四大组件-service全面解析一
- Android四大组件:BroadcastReceiver全面解析
- Android四大组件:BroadcastReceiver史上最全面解析
- Android四大组件完全解析(二)---Service
- Android源码解析四大组件系列(一)---Service的启动过程分析
- Android四大组件:BroadcastReceiver史上最全面解析
- Android 四大组件之Service解析
- [Android知识体系]之四大组件:service(完全解析下)
- Android四大组件:BroadcastReceiver史上最全面解析
- Android四大组件之Service解析
- [Android知识体系]之四大组件:service(完全解析上)
- Android四大组件:Service史上最全面解析
- Android四大组件:Service史上最全面解析
- Android四大组件之Service全面学习
- Android四大组件:BroadcastReceiver史上最全面解析
- Android四大组件之一---BroadcastReceiver全面解析
- Android四大基本组件——Service完全解析
- Android四大组件:BroadcastReceiver史上最全面解析
- Android四大组件之ContentProvider 全面解析,ContentResolver源码解析如何调用其它APP的ContentProvider