AsyncTask使用及實現原理 二

2021-09-12 05:17:39 字數 1370 閱讀 3716

在這之前我們先來介紹進度執行及更新的兩個方法。

/**

* 任務的執行進度

* @param values

*/@override

protected void onprogressupdate(integer... values)

這個是進度的監聽方法,再看下進度的執行方法。

protected final void publishprogress(progress... values) 

}

這個方法是要放在非同步執行方法中來執行的,也就是在doinbackground 方法中呼叫publishprogress方法將進度引數寫入,然後onpprogressupdate方法就會執行。大概流程就是這樣,下面我們來看publishprogress具體是如何來實現的。

iscancelled() 用來判斷當前任務是否取消了,如果沒有取消,則通過handler方法傳送訊息。

public final boolean iscancelled()
那麼又是如何判斷任務取消的,只要知道mcancelled 在**set值就能找到了,它本身是atomicboolean 變數名,借用別人的一些理解 atomicboolean :其基本的特性就是在多執行緒環境下,當有多個執行緒同時執行這些類的例項包含的方法時,具有排他性,即當某個執行緒進入方法,執行其中的指令時,不會被其他執行緒打斷,而別的執行緒就像自旋鎖一樣,一直等到該方法執行完成,才由jvm從等待佇列中選擇乙個另乙個執行緒進入。接著看:

public final boolean cancel(boolean mayinterruptifrunning)
也就是說當我們呼叫了cancel方法後該任務將會被取消。扯的有點遠了,我們回到主幹上publishprogress方法。

簡單看下asynctaskresult類

private static class asynctaskresult

}

它是乙個內部私有類,有兩個引數,乙個是asynctask 乙個是自定義型別泛型陣列data,通過new 這個類將引數放在其中,通過handler傳送訊息,接收到訊息後再將msg.obj轉為asynctaskresult<?>,實現主線程和ui執行緒切換。

public void handlemessage(message msg) 

}

result.mtask.onprogressupdate(result.mdata); 通過重寫asynctask 的onprogressupdate方法實現進度更新。
這樣我們就可以實現非同步任務進度更新工作了。

AsyncTask實現原理

asynctask是android提供的輕量級的非同步類,可以直接繼承asynctask,在類中實現非同步操作,並提供介面反饋當前非同步執行的程度 可以通過介面實現ui進度更新 最後反饋執行的結果給ui主線程 使用的優點 簡單,快捷,過程可控 ui的更新只能在主線程中完成。asynctask定義了三...

AsyncTask 使用解析

asynctask 能夠適當的,簡單的用於ui執行緒,我們可以很方便的去使用,不用自己去開啟執行緒。asynctask執行機制是這樣的 所有的任務都會在後台執行緒上執行,最後直接在ui執行緒上發布。繼承asnyctask需要至少覆蓋 doinbackgroud params 方法,一般也會去覆蓋 o...

AsyncTask使用原則

首先要明確android 之所以有 handler 和asynctask 都是為了不堵塞主線程 ui執行緒 且 ui的更新只能在主線程中完成,因此一步處理是不可避免的。android1.5提供了乙個工具類 asynctask,它使建立需要與使用者介面互動的長時間執行的任務變得更簡單。不需要借助執行緒...