一、什么是Service?
service是运行在后台,没有提供用户界面、具有自己独立生命周期的应用组件。运行在ui线程,所以也不能执行耗时操作
二、Service和Thread的相同点与区别
相同点:后台运行,用户不可见
区别:
1、service拥有自己独立的生命周期,thread一般依赖于其他组件。
2、service 运行在主线程,不能执行耗时操作。thread运行子线程,一般用于执行耗时的操作。
三、Service的使用
同actiity一样,需要在清单文件中注册。并集成Service。启动方式有两种,startService(Intent i) 和 bindService(Intent i);
关闭Service,stopService(Intent i)或stopSelf()或 unbindService(Intent i); 当使用bindService启动的时候,使用unbindService解除跟其他组件的绑定;
四、生命周期
根据启动方式和关闭方式的不同,生命周期也不一样。
1、通过startService()方法启动: onCreate()》onStartComand()》onStart(已不推荐使用了)》onDestroy()
2、通过bindService()方式与组件绑定方式启动:onCreate()》onBind() 》onDestroy()
五、Service保活技术
参考文献:https://blog.csdn.net/qq_38520096/article/details/79007228
参考文献:https://blog.csdn.net/nightwizard2030/article/details/78441212
总结:
5.0以上,7.0以下的系统:
1、提高优先级,设置为前台进程
2、提供 jobService 重新再拉起Service
3、广播:如 接收wifi的广播,再启动Service
4、开机自启动
7.0 以上,goole控制了很多。以上方法被控制减少自启动
但是也是有如下方法可以,但不能百分之百:
1、双进程守护,即开启另外一个Service,去相互唤起
2、在被kill的时候,执行onDestroy回调的时候再唤起其他进程,再用另外经常去唤起Service