安卓四大元件學習之Service
Service
按官方原文件所說:Service是一個沒有介面在後臺執行耗時操作的應用元件。其他元件能夠啟動Service,並且當用戶切換到相應的應用場景,Service一樣能在後臺持續執行。另外一個元件還能繫結到Service與之互動(IPC通訊),所有這些活動都是在後臺進行的,Service有兩種狀態“啟動的”和“繫結的”。
Service的生命週期
Service的生命週期有2種:
呼叫StartService():onCreate->onstart->onStartCommand->onDestroy
呼叫BindService():onCreate->onBind->onUnBind->onDestroy
通過startService啟動服務處於“啟動的”狀態,這個時候不管啟動它的元件是否銷燬,Service會一直在後臺執行。通常started狀態的Service執行單任務,並且不回任何結果給啟動者,比如當下載或上傳一個檔案時,當任務完成Service就應該停止。
通過Bind啟動的服務處於“繫結的”狀態,這種方式一般結合AIDL使用(IPC通訊機制)。
AIDL的實現步驟:
特別要注意:如果啟動一個服務並且繫結服務,那麼在結束服務時必須先解綁再停止服務,直接停止服務Service並不會Destroy掉.
Service與Activity一樣都存在當前程序的主執行緒中,所以不能直接在Service裡面進行耗時操作,必須新開子執行緒。只是說在Serivce裡面的執行緒比在Activity中建立的執行緒更好管理。
IntentService
IntentService使用佇列的方式來處理多個Intent請求,對於非同步的Intent請求intentService會開啟一個wordThread執行緒在處理,並且採用佇列的模式處理完第一個再處理第二個。(onHandleIntent)
這裡就給我們提供了一個思路,與其在Service開啟新執行緒進行耗時操作,還不如直接使用IntentService來處理耗時操作。