Android學習之Service(一)

Service

Service爲Android的四大組件之一,它被用來執行一些不需要和用戶交互的以及運行時間長的任務,一個活動可以啓動一個服務,它將繼續在後臺運行,即使用戶切換到另一個應用。

Service可以分爲兩種基本類型:

#

  1. started
    如果一個應用程序組件(比如一個activity)通過調用startService()來啓動服務,則該服務就是被“started”了。一旦被啓動,服務就能在後臺一直運行下去,即使啓動它的組件已經被銷燬了。 通常,started的服務執行單一的操作並且不會向調用者返回結果。比如,它可以通過網絡下載或上傳文件。當操作完成後,服務應該自行終止。
  2. bound
    如果一個應用程序組件通過調用bindService()綁定到服務上,則該服務就是被“bound”了。bound服務提供了一個客戶端/服務器接口,允許組件與服務進行交互、發送請求、獲取結果,甚至可以利用進程間通信(IPC)跨進程執行這些操作。綁定服務的生存期和被綁定的應用程序組件一致。 多個組件可以同時與一個服務綁定,不過所有的組件解除綁定後,服務也就會被銷燬。

下圖爲官方給出的Service生命週期
Service的生命週期圖

服務的完整生存期開始於onCreate()調用時,結束於onDestroy()返回時。與activity類似,服務在onCreate()中完成初始設置工作,並在onDestroy()中釋放所有未釋放的資源。例如,一個音樂播放服務可以在onCreate()中創建音樂播放線程,而在onDestroy()中終止該線程。 不管是用startService()創建的,還是用bindService()創建的,所有的服務都會調用onCreate()和onDestroy()方法。

服務的活躍生存期開始於onStartCommand()或onBind()的調用。這兩個方法分別會傳入傳給startService()或bindService()的 Intent。 如果服務是started的,則活躍生存期與完整生存期同時結束(即使onStartCommand()返回後,服務仍然處於活躍期。)如果服務是bound的,則活躍生存期在 onUnbind() 返回後結束。

#

定義一個服務

定義一個服務即聲明一個繼承於Service的類,該類有一個抽象方法onBind()

定義服務之後需要在manifest文件中聲明

<manifest ... >
  ...
  <application ... >
      <service android:name=".ExampleService" />
      ...
  </application>
</manifest>

在<service>元素中可以包含很多其它屬性,比如定義啓動服務所需權限、服務運行的進程之類的屬性。android:name是唯一必需的屬性——它定義了服務的類名。

#

啓動及停止服務

#

Intent startIntent = new Intent(this,MyService.class);
startService(startIntent);//啓動服務
Intent stopIntent = new Intent(this,MyService.class);
stopService(stopIntent);//停止服務

在啓動服務時,會調用onCreate()方法和onStartCommand()方法,但onCreate()方法僅在第一次創建時調用,而onStartCommand()方法可以被多次調用。

#

發佈了26 篇原創文章 · 獲贊 34 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章