IntentService原始碼分析

2021-07-12 06:41:27 字數 1343 閱讀 9702

一般情況下,service是在主線程中執行的,這樣如果處理耗時操作會造成anr的問題,但是很多場景下我們需要用service進行耗時操作,此時就需要一種新的機制,於是便引進了intentservice的概念。

先看一下官方的說法吧

總結一下,就是intentservice為了符合下面需求的場景。

先看一眼intentservice的成員:

public abstract class intentservice extends service

從這裡可以看出來intentservice使用handler機制實現了非同步

下面進入它的生命週期

public void oncreate() 

public void onstart(intent intent, int startid)

public void ondestroy()

從這裡可以看出,在oncreate中使用handlerthread的初始化了非同步機制,在onstart方法中獲取到intent引數,將其放入message中,

private final class servicehandler extends handler 

@override

public void handlemessage(message msg)

}

在之前create方法中可以看到我們呼叫了建構函式,與當前執行緒的looper與handler相關聯。

handlermessage的方法中,我們先呼叫了onhandlerintent的方法處理包含intent的message

protected abstract void onhandleintent(intent intent);

當實現intentservice時,需要重寫onhandleinent方法。

在執行完處理方法後,呼叫stopself方法,終止了這個service,stopself的方法在其父類service中實現,使用activitymanager進行stop操作。

public final void stopself(int startid) 

try catch (remoteexception ex)

}

綜上所述,intentservice利用intent傳遞引數構建message,然後將該message通過handler機制進行處理,實現了非同步處理。處理後呼叫stopself進行自動停止。

這樣的特性可以使我們在service中非同步執行耗時操作,並且自行停止。

AbstractCollection原始碼分析

abstractcollection抽象類提供了collection的骨架實現,collection分析請看 這裡直接看它的 是如何實現的.public abstract iterator iterator 該方法沒有實現.public abstract int size 該方法沒有實現.publi...

ThreadPoolExecutor原始碼閱讀

執行緒池解決兩個問題 一是復用執行緒,減少建立銷毀執行緒帶來系統開銷 二是限定系統資源使用邊界,避免大量執行緒消耗盡系統記憶體 適用於互不依賴,執行時間短,不需要對執行緒控制操作的執行緒 新增任務時,1.若執行緒數量小於corepoolsize,則新增執行緒執行任務 2.若執行緒數量大於等於core...

OrangePi One Android 原始碼編譯

一 系統環境搭建參照 二 lichee原始碼編譯 1.檢視help build.sh h2.配置核心 cd linux 3.4 make arch arm menuconfig 進入配置頁面,上下移動列表,空格是選擇列表,左右移動選擇退出選項 3.首次編譯執行清除 在 lichee linux3.4...