服务概览 | Android 开发者 | Android Developers (google.cn)
从生命周期图可以看出,Service有两种启动方式,startService和bindService
🚀 startService启动后,Service会无限期运行下去,只有外部调用stopService或stopSelf才会停止和销毁。
🚀 bindService启动的服务和调用者之间是典型的Client-Server模式,调用者是Client端,服务Service是Server端。Service只有一个,但绑定到Service上的Client可以有多个。Client可以通过IBinder接口获取Service实例,从而调用Service的方法
要启动BindService,需要:
销毁:
onStartCommand方式中,返回START_STICKY
如果onStartCommand返回START_NOT_STICKY,表示当Service运行的进程被Android系统强制杀掉之后,不会重新创建该Service
如果onStartCommand返回START_STICKY,表示Service运行的进程被Android系统强制杀掉之后,Android系统会将该Service依然设置为started状态(即运行状态),但是不再保存onStartCommand方法传入的intent对象,然后Android系统会尝试再次重新创建该Service,并执行onStartCommand回调方法
如果你的Service可以在任意时刻运行或结束都没什么问题,而且不需要intent信息,那么就可以在onStartCommand方法中返回START_STICKY
提高Service的优先级
提升Service进程的优先级
Android将进程分为6个等级,按照优先级由高到低依次为:
在onDestroy方法里重启Service
当service走到onDestroy()时,发送一个自定义广播,当收到广播时,重新启动service。
系统广播监听Service状态
将APK安装到/system/app,变身为系统级应用