天天看點

Android Service(服務)

  service是android四大元件之一,也可以稱為背景服務。service是一個可以長期在背景執行而不用提供使用者界面的應用元件。服務可由其它應用元件啟動,即使切換到其它應用元件,服務依然會在背景繼續運作。

  此外,元件可以綁定到服務,并與之進行互動,甚至是執行程序間通信(ipc)。

  例如,服務可以處理網絡通信,播放音樂\電影,執行檔案i/o,這一切的操作都是在背景進行的。

  服務分為兩類,第一類是本地服務(local service);第二類為遠端服務(remote service)。 

  服務(service)與broadcast receiver(廣播)一樣在androidmanifest.xml(清單檔案)中注冊。

   

  (1). exported是設定是否允許其它應用啟動此服務,預設值是通過是否有intent-filter來設定,有intent-filter為true,反之為false。當為true時,允許其它應用啟動此服務。

  (2).android:permission是設定服務權限,隻有申請了此權限的應用的才能啟動并調用此服務。

    startservice(...) -> oncreate(...) -> onstartcommand(...) ,服務隻能停止一次,通過stopservice(...)或者stopself()方法停止服務後,會調用ondestory()方法,銷毀服務。如果,服務沒有被停止、銷毀,再次使用startservice(...)啟動服務時,會從onstartcommand(...)方法開始執行。

    1. stopservice(...):通過另一個元件調用此方法停止服務。

    2. stopself():通過此方法在服務自身停止本服務。

  1. 在調用startservice(...)方法啟動服務後,服務内部調用方法流程:

    (1). oncreate()方法;

    (2). onstartcommand(intent intent, int flag, int startid)方法;(允許元件啟動服務)

  2. 在調用stopservice(...) 方法停止服務後,服務内部調用方法流程:

    (1). ondestroy()方法;// 銷毀服務

  ps:在下次再次啟動服務(調用startservice(...)方法)時,會再次從oncreate(...)方法開始。當然,在服務已經啟動了,再次使用startservice(...)方法啟動服務,就不會從oncreate(...)方法開始執行,因為,服務已經啟動了,隻會從onstartcommand(...)方法開始。

  特點:使用startservice(...)開啟服務,服務就和調用者(開啟者)沒有任何關系了,即使調用者(開啟者)退出了或者挂掉了,服務依然在背景運作,不會随着調用者(開啟者)退出或者挂掉而結束,隻能通過stopservice(...)或者服務内部方法stopself()方法停止,服務停止立即銷毀(就是會調用ondestroy()方法)。并且這種服務開啟方式是不能調用服務内部方法的。(startservice(...)開啟的服務也可以稱為遠端服務)

  通過其它元件與服務進行綁定的方式開啟服務。

  使用bindservice(...)啟動服務是不會調用onstartcommand(...)方法的。

  可以通過unbindservice(...)方法停止服務。

  生命周期:

  oncreate() --> onbind() --> unonbind() --> ondestory()

  特點:使用bindservice()方法啟動服務,綁定服務後,元件的生命周期結束,服務的生命周期也随之結束,也就是調用者(開啟者),退出或者挂掉後,服務也随之結束。通過bindservice(...)方法啟動綁定的服務,調用者(開啟者)可以調用服務的内部方法。(通過bindservice(...)開啟的服務,也可以稱為本地服務)