目錄
一、作用
二、生命周期
三、啟動方式
四、啟動方式
五、IntentService
Service簡介
Service是Android程序中四大基礎(chǔ)組件之一,它和Activity一樣都是Context的子類,只不過它沒有UI界面,是在后臺運行的組件。
注意
- 長期運行的后臺任務(wù) — Service是Android中實現(xiàn)程序后臺運行的解決方案,它非常適用于去執(zhí)行那些不需要和用戶交互而且還要求長期運行的任務(wù)。
- 執(zhí)行在UI線程中 — Service默認并不會運行在子線程中,它也不運行在一個獨立的進程中,它同樣執(zhí)行在UI線程中,因此,不要在Service中執(zhí)行耗時的操作,除非你在Service中創(chuàng)建了子線程來完成耗時操作。
一、作用
二、生命周期
onCreate
onstartCommand
onBind
onunbind
ondestroy
三、啟動方式
- startservice — startservice 一旦被開啟 與調(diào)用者 就沒有關(guān)系了。這個服務(wù) 會長期的在后臺運行。
- bindservice — bindservice 是 將調(diào)用者 與 服務(wù)綁定,如果開啟這個服務(wù)的 activity 被銷毀,那么這個服務(wù)也相應(yīng)的要掛掉
四、
五、IntentService
IntentService簡介
IntentService是繼承于Service并處理異步請求的一個類,在IntentService內(nèi)有一個工作線程來處理耗時操作,啟動IntentService的方式和啟動傳統(tǒng)Service一樣,同時,當任務(wù)執(zhí)行完后,IntentService會自動停止,而不需要我們?nèi)ナ謩涌刂?。另外,可以啟動IntentService多次,而每一個耗時操作會以工作隊列的方式在IntentService的onHandleIntent回調(diào)方法中執(zhí)行,并且,每次只會執(zhí)行一個工作線程,執(zhí)行完第一個再執(zhí)行第二個,以此類推。
Service本身存在兩個問題
- Service不會專門啟動一條單獨的進程,Service與它所在應(yīng)用位于同一個進程中。
- Service也不是專門一條新線程,因此不應(yīng)該在Service中直接處理耗時的任務(wù)。
IntentService特征
- 會創(chuàng)建獨立的worker線程來處理所有的Intent請求。
- 會創(chuàng)建獨立的worker線程來處理onHandleIntent()方法實現(xiàn)的代碼,無需處理多線程問題。
- 所有請求處理完成后,IntentService會自動停止,無需調(diào)用stopSelf()方法停止Service。
- 為Service的onBind()提供默認實現(xiàn),返回null。
- 為Service的onStartCommand提供默認實現(xiàn),將請求Intent添加到隊列中。
- 所有請求都在一個單線程中,不會阻塞應(yīng)用程序的主線程(UI Thread),同一時間只處理一個請求。
- 不可以直接和UI做交互。為了把它執(zhí)行的結(jié)果體現(xiàn)在UI上,需要把結(jié)果返回給Activity。
- 工作任務(wù)隊列是順序執(zhí)行的,如果一個任務(wù)正在IntentService中執(zhí)行,此時你再發(fā)送一個新的任務(wù)請求,這個新的任務(wù)會一直等待直到前面一個任務(wù)執(zhí)行完畢才開始執(zhí)行。
- 正在執(zhí)行的任務(wù)無法打斷。
使用IntentService的好處
- 省去了在Service中手動開線程的麻煩。
- 當操作完成時,不用手動停止Service。
使用步驟
繼承IntentService類,并重寫onHandleIntent()方法即可。