【安卓篇】四大组件●Service服务介绍及生命周期

来源:互联网 发布:海岛奇兵震爆数据 编辑:程序博客网 时间:2024/05/17 09:04
 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(),使用startService()方法启动服务时,服务首次启动系统先调用服务的onCreate()-->onStart(),如果服务已经启动,再次调用则只会触发onStart()方法

  使用bindService()启动的服务与调用者绑定,只要调用者关闭服务就终止,使用此方法启动时,服务首次启动系统先调用服务的onCreate()-->onBind(),如果服务已经启动再次调用不会再触发这2个方法,调用者退出时系统会调用服务的onUnbind()-->onDestory(),想主动解除绑定可使用Contex.unbindService(),系统依次调用onUnbind()-->onDestory();

Service服务生命周期
 


  Service完整的生命周期:从调用onCreate()开始直到调用onDestroy()结束

  Service有两种使用方法:

  1、以调用Context.startService()启动,而以调用Context.stopService()结束

  2、以调用Context.bindService()方法建立,以调用Context.unbindService()关闭

  service重要的生命周期方法

  void
onCreate() 

  当用户调用startService()或bindService()时,Service第一次被实例化的时候系统会调用,整个生命周期只调用1次这个方法,通常用于初始化设置。注意:多次调用startService()或bindService()方法不会多次触发onCreate()方法
  
  void
onDestroy() 

  当用户调用stopService()或unbindService()来停止服务时被系统调用,(整个生命周期只调用1次)用来释放onCreate()方法中创建的资源

  通过startService()方法启动的服务

  void
onStart(Intent intent) 

      初始化结束后系统会调用该方法,用于处理传递给startService()的Intent对象。如音乐服务会打开Intent 来探明将要播放哪首音乐,并开始播放。注意:多次调用startService()方法会多次触发onStart()方法

  通过bindService ()方法启动的服务

  
IBinder onBind(Intent intent) 

      初始化结束后系统会调用该方法,用来绑定传递给bindService 的Intent 的对象。注意:多次调用bindService()时,如果该服务已启动则不会再触发此方法

  boolean onUnbind(Intent intent)

  用户调用unbindService()时系统调用此方法,Intent 对象同样传递给该方法

  void onRebind(Intent intent)

  如果有新的客户端连接至该服务,只有当旧的调用onUnbind()后,新的才会调用该方法

0 0
原创粉丝点击