intentservice 是 service 的基類,可根據需要處理非同步請求(表示為 intent
)。客戶端通過context.startservice(intent)
呼叫傳送請求; 根據需要啟動服務,使用工作執行緒依次處理每個intent,並在工作失敗時自行停止。
步驟:建立乙個服務類,使它繼承自 intentservice
建立具體邏輯**
在 mainfest.xml 中進行註冊
public class myintentservice extends intentservice
@override
public void oncreate()
@override
protected void onhandleintent(@nullable intent intent)
@override
public void ondestroy()
}
我們很顯眼的看到了方法 :onhandleintent ,讓我們看看他的原始碼
可以看到這是乙個非常簡單的抽象方法,它的特性:
}thread.sleep(1000);// 模擬初始化耗時
} catch (interruptedexception e)
}每隔 50ms 傳送一次廣播 更新資料
private void sendifotobroadcast(string servicestatus)
private void sendifotobroadcast(string servicestatus, int progressstatus)
根據剛剛翻譯的文件可知:如果這個耗時操作結束,也就是 onhandleintent 方法呼叫結束,那麼 intentservice 也就會隨之結束
private int progresscount = 0;
private boolean isrunning = false;
private localbroadcastmanager manager;
public myintentservice()
@override
public void oncreate()
@override
public void ondestroy()
全部詳情請一打包 demo ->![](https://pic.w3help.cc/552/578b8d835f69261ceff8ba22225bf.jpeg)
如果你覺得本篇博文總結的不錯,記得給我點讚呦~~ 麼麼噠~~
六一快樂 啦啦啦
非同步服務IntentService
服務service雖然是在後台執行,但跟activity一樣都在主線程中,如果後台執行著的服務掛起,使用者介面就會卡著不動,俗稱宕機。後台服務經常要做一些耗時操作,比如批量處理 檔案匯入 網路訪問等,此時不應該影響使用者在介面上的操作,而應該開啟分執行緒執行耗時操作。可以通過thread handl...
IntentService原始碼分析
一般情況下,service是在主線程中執行的,這樣如果處理耗時操作會造成anr的問題,但是很多場景下我們需要用service進行耗時操作,此時就需要一種新的機制,於是便引進了intentservice的概念。先看一下官方的說法吧 總結一下,就是intentservice為了符合下面需求的場景。先看一...
IntentService原始碼解析
前言 intentservice算是service中比較重要的乙個類,而且就100行 今天一起閱讀它的原始碼和注釋。成員變數 4個 mservicelooper looper 與執行緒關聯的looper mservicehandler servicehandler 自定義handler子類,會在ha...