intentservice預設不在主線程中,耗時操作可以在onhandleintent()做,不會出現執行緒阻塞的情況。而且省掉了開執行緒的麻煩。其內部採用了handlethread實現了非同步操作。當onhandleintent執行完後,會呼叫stopself()停止intentservice。適用於只使用一次的操作。
如果在程式中新增looper.loop(),生命週期為:
無參建構函式 --> oncreate --> onstartcommand --> onhandleintent.
當再次啟動intentservice只呼叫 onstartcommand() 和 onhandleintent()。
如果沒有新增looper.loop(),每次啟動intentservice,生命週期為:
無參建構函式 --> oncreate -->onstartcommand -->onhandleintent
-->
ondestory
**:
public class lyrintentservice extends intentservice
public lyrintentservice()
@override
public void oncreate()
@override
public int onstartcommand(intent intent, int flags, int startid)
@override
protected void onhandleintent(intent intent)
IntentService 高階使用指南
intentservice 是 service 的基類,可根據需要處理非同步請求 表示為 intent 客戶端通過context.startservice intent 呼叫傳送請求 根據需要啟動服務,使用工作執行緒依次處理每個intent,並在工作失敗時自行停止。步驟 建立乙個服務類,使它繼承自 ...
非同步服務IntentService
服務service雖然是在後台執行,但跟activity一樣都在主線程中,如果後台執行著的服務掛起,使用者介面就會卡著不動,俗稱宕機。後台服務經常要做一些耗時操作,比如批量處理 檔案匯入 網路訪問等,此時不應該影響使用者在介面上的操作,而應該開啟分執行緒執行耗時操作。可以通過thread handl...
IntentService原始碼分析
一般情況下,service是在主線程中執行的,這樣如果處理耗時操作會造成anr的問題,但是很多場景下我們需要用service進行耗時操作,此時就需要一種新的機制,於是便引進了intentservice的概念。先看一下官方的說法吧 總結一下,就是intentservice為了符合下面需求的場景。先看一...