全部博文(403)
2012年(403)
分类: 嵌入式
2012-04-21 22:35:34
Service可以被启动或者允许被启动直到有人停止了它或者它自己停止了。在这种模式下,它通过Context.startService()方法开始,通过Context.stopService()方法停止。它可以通过Service.stopSelf()方法或者Service.stopSelfResult()方法来停止自己。只要调用一次stopService()方法便可以停止服务,无论调用了多少次的启动服务方法。
Service可以通过定义好的接口来编程,客户端建立一个与Service的链接,并使用此链接与Service进行通话。通过Context.bindService()方法来绑定服务,Context.unbindService()方法来关闭服务。多个客户端可以绑定同一个服务。如果Service还未被启动,bindService()方法可以启动服务。
这两种模式是完全独立的。你可以绑定一个已经通过startService()方法启动的服务。例如:一个后台播放音乐服务可以通过startService()和一个intend对象来播放音乐。可能用户在播放过程中要执行一些操作比如获取歌曲的一些信息,此时activity可以通过调用bindServices()方法与Service建立连接。这种情况下,stopServices()方法实际上不会停止服务,直到最后一次绑定关闭。
像一个activity那样,一个Service有些可以用来改变状态的生命周期方法。但是比activity的方法少,Service生命周期方法只有三个,而且都是public修饰。
void onCreate()
void onStart(Intent intent)
void onDestroy()
通过实现这三个生命周期方法,你可以监听Service的两个嵌套循环的生命周期。
Service整个生命周期Service的整个生命周期是在onCreate()和onDestroy()方法之间。和activity一样,在onCreate()方法里初始化,在onDestroy()方法里释放资源。例如,一个背景音乐播放服务可以在onCreate()方法里播放,在onDestroy()方法里停止。
Service活动的生命周期Service的活动生命周期是在onStart()之后,这个方法会处理通过startServices()方法传递来的Intent对象。音乐Service可以通过开打intent对象来找到要播放的音乐,然后开始后台播放。
Service停止时没有相应的回调方法,即没有onStop()方法。onCreate()方法和onDestroy()方法是针对所有的Services,无论它们是否启动。通过Context.startService()和Context.bindService()方法。然而,只有通过startService()方法启动的Service才会被调用onStart()方法。如果一个Service允许别人绑定,那么需要实现以下额外的方法:
IBinder onBind(Intent intent)
boolean onUnbind(Intent intent)
void onRebind(Intent intent)
onBind()回调方法会继续传递通过bindService()传递来的intent对像。onUnbind()会处理传递给unbindService()的intent对象。如果Service允许绑定,onBind()会返回客户端与服务互相联系的通信频道。如果建立了一个新的客户端与服务的链接,onUnbind()方法可以请求调用onRebind()方法。
下面的图表介绍了Service的回调方法,然而,它把通过startService()方法建立的服务从通过bindService()方法建立的服务分离开。记住任何服务,无果它怎样建立,都默认客户端可以链接,所以任何的Service能够接收onBind()和onUnbind()方法。