Android Service的生命周期
Service作为Android四大组件之一,应用非常广泛。和Activity一样, Service也有一系列的生命周期回调函数,我们可以用来监测Service状态变化,并且在适当的时候执行适当的工作。一个Service 是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序。
比较好的一个例子就是一个正在从播放列表中播放歌曲的媒体播放器。在一个媒体播放器的应用中,应该会有多个activity,让使用者可以选择歌曲并播放歌曲。然而,音乐重放这个功能并没有对应的activity,因为使用者当然会认为在导航到其它屏幕时音乐应该还在播放的。在这个例子中,媒体播放器这个activity 会使用Context.startService()来启动一个service,从而可以在后台保持音乐的播放。同时,系统也将保持这个service 一直执行,直到这个service 运行结束。另外,我们还可以通过使用Context.bindService()方法,连接到一个service 上(如果这个service 还没有运行将启动它)。当连接到一个service 之后,我们还可以service 提供的接口与它进行通讯。拿媒体播放器这个例子来说,我们还可以进行暂停、重播等操作。
Service使用步骤如下
1>继承service类
2>AndroidManifast.xml配置清单文件中<application>节点里对服务进行配置
<service name=".SMSService"/>
服务不能自己运行,需要通过Contex.startService()或Contex.bindService()启动服务。
通过startService()方法启动的服务于调用者没有关系,即使调用者关闭了,服务仍然运行。想停止服务要调用Context.stopService(),此时系统会调用onDestory(),使用此方法启动时,服务首次启动系统先调用服务的onCreate()-->onStart(),如果服务已经启动再次调用只会触发onStart()方法
使用bindService()启动的服务与调用者绑定,只要调用者关闭,服务就终止,使用此方法启动时,服务首次启动系统先调用服务的onCreate()-->onBind(),如果服务已经启动,再次调用不会再触发这2个方法。调用者退出时,系统会调用服务的onUnbind()-->onDestory(),想主动解除绑定可使用Contex.unbindService(),系统依次调用onUnbind()-->onDestory();
1.生命周期状态
更加直观点,可见下面《Service 生命周期流程图》
- onCreate):
首次创建服务时,系统将调用此方法。如果服务已在运行,则不会调用此方法,该方法只调用一次。
- onStartCommand):
当另一个组件通过调用startservice()请求启动服务时,系统将调用此方法。
- onDestroy0:
当服务不再使用且将被销毁时,系统将调用此方法。
- onBindo:
当另一个组件通过调用bindservice()与服务绑定时,系统将调用此方法。
- onUnbind0:
当另一个组件通过调用unbindService()与服务解绑时,系统将调用此方法。
- onRebind0:
当旧的组件与服务解绑后,另一个新的组件与服务绑定, onunbind()返回true时,系统将调用此方法。
2.生命周期方法
在Service的生命周期里,常用的方法有:
3.生命周期方法
注:onstart()方法和onStartCommand()方法的区别:
onstart()方法是在android2.0一下的版本中使用。而在android2.0以上则使用onstartCommand()方法。它们两个方法放在一起使用时,不会产生冲突。
参考:
1.作者:翻译不了的声响 链接:https://www.jianshu.com/p/cc25fbb5c0b3
2. <https://www.cnblogs.com/bravestarrhu/archive/2012/05/02/2479461.html>