Android 之Service的使用及生命周期

关于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" />
原文地址:https://www.cnblogs.com/mengyan1124/p/4503766.html