关于Android中的Service的使用,首先要明白Service的生命周期,开发Service的步骤与Activity的步骤很像,开发Service组件需要先开发一个Service的子类,然后在AndroidManifest.xml中配置该Service。
首先,先来说一下Service的生命周期:
正如Activity一样,Service也有自己的一套生命周期函数,在Android中,运行Service有两种方法:
(1) 通过Context的startService()方法:通过该方法启动Service,那么即使访问者退出了,Service仍然在运行着,因为访问者与Service之间没有关联;
(2) 通过Context的bindService()方法:通过该方法启动Service,访问者与Service绑定在一起,访问者一旦退出了,Service也就终止。
service整体的生命时间是从onCreate()被调用开始,到onDestroy()方法返回为止。
和activity一样,service在onCreate()中进行它的初始化工作,在onDestroy()中释放残留的资源。
那么如何来使用第二种运行方式来运行一个Service呢?
每一个被创建好的Service都潜在的允许绑定,所以一个被开启的Service仍然可能被绑定的,
调用被绑定的service是当其他组件(一个客户)调用bindService()来创建的,客户可以通过一个IBinder()接口和service进行通信。
客户可以通过 unbindService()方法来关闭这种连接,一个service可以同时和多个客户绑定,当多个客户都解除绑定之后,系统会销毁service。
通过下边的这张图洗完可以更好的帮助理解一下Service的周期。
下边的类定义了一个Service组件,虽然这个Service什么事情也没干,但实际是那个它是Service组件的框架,如果希望Service做某些事情,那么只要在onCreate()或onStartCommand()方法中定义响应的恶业务代码即可。
public class MyFirstService extends Service { private String Tag = "MyFirstService"; @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return null; } @Override public void onCreate() { // TODO Auto-generated method stub Log.v(Tag, "Service is Created"); super.onCreate(); } @Override public void onDestroy() { // TODO Auto-generated method stub Log.v(Tag, "Service is Destroy"); super.onDestroy(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { // TODO Auto-generated method stub Log.v(Tag, "Service is Started"); return super.onStartCommand(intent, flags, startId); } @Override public boolean onUnbind(Intent intent) { // TODO Auto-generated method stub Log.v(Tag, "start onUnbind~~~"); return super.onUnbind(intent); } }
定义了上边的Service之后,需要在AndroidManifest.xml中被指该Service:
<service android:name="com.example.service.MyFirstService" />