AsyncTask例項分析

2021-06-21 11:11:06 字數 2707 閱讀 1661

/**  

* 生成該類的物件,並呼叫execute方法之後

* 首先執行的是onproexecute方法

* 其次執行doinbackgroup方法

* */

public class progressbarasynctask extends asynctask

/**

* 這裡的integer引數對應asynctask中的第乙個引數

* 這裡的string返回值對應asynctask的第三個引數

* 該方法並不執行在ui執行緒當中,主要用於非同步操作,所有在該方法中不能對ui當中的空間進行設定和修改

* 但是可以呼叫publishprogress方法觸發onprogressupdate對ui進行操作

*/

@override

protected string doinbackground(integer... params)

return i + params[0].intvalue() + "";

} /**

* 這裡的string引數對應asynctask中的第三個引數(也就是接收doinbackground的返回值)

* 在doinbackground方法執行結束之後在執行,並且執行在ui執行緒當中 可以對ui空間進行設定

*/

@override

protected void onpostexecute(string result)

//該方法執行在ui執行緒當中,並且執行在ui執行緒當中 可以對ui空間進行設定

@override

protected void onpreexecute()

/**

* 這裡的intege引數對應asynctask中的第二個引數

* 在doinbackground方法當中,,每次呼叫publishprogress方法都會觸發onprogressupdate執行

* onprogressupdate是在ui執行緒中執行,所有可以對ui空間進行操作

*/

@override

protected void onprogressupdate(integer... values)

}

asynctask介紹:

首先簡單看乙個asynctask例項

/** * 生成該類的物件,並呼叫execute方法之後 * 首先執行的是onproexecute方法 * 其次執行doinbackgroup方法 * */ public class progressbarasynctask extends asynctask /** * 這裡的integer引數對應asynctask中的第乙個引數 * 這裡的string返回值對應asynctask的第三個引數 * 該方法並不執行在ui執行緒當中,主要用於非同步操作,所有在該方法中不能對ui當中的空間進行設定和修改 * 但是可以呼叫publishprogress方法觸發onprogressupdate對ui進行操作

*/ @override protected string doinbackground(integer... params) return i + params[0].intvalue() + ""; } /** * 這裡的string引數對應asynctask中的第三個引數(也就是接收doinbackground的返回值)

* 在doinbackground方法執行結束之後在執行,並且執行在ui執行緒當中 可以對ui空間進行設定 */ @override protected void onpostexecute(string result) //該方法執行在ui執行緒當中,並且執行在ui執行緒當中 可以對ui空間進行設定 @override protected void onpreexecute() /** * 這裡的intege引數對應asynctask中的第二個引數 * 在doinbackground方法當中,,每次呼叫publishprogress方法都會觸發onprogressupdate執行 * onprogressupdate是在ui執行緒中執行,所有可以對ui空間進行操作 */ @override protected void onprogressupdate(integer... values) }

android的asynctask比handler更輕量級一些,適用於簡單的非同步處理。

首先明確android之所以有handler和asynctask,都是為了不阻塞主線程(ui執行緒),且ui的更新只能在主線程中完成,因此非同步處理是不可避免的。

android為了降低這個開發難度,提供了asynctask。asynctask就是乙個封裝過的後台任務類,顧名思義就是非同步任務。

asynctask直接繼承於object類,位置為android.os.asynctask。要使用asynctask工作我們要提供三個泛型引數,並過載幾個方法(至少過載乙個)。

asynctask定義了三種泛型型別 params,progress和result。

使用過asynctask 的同學都知道乙個非同步載入資料最少要重寫以下這兩個方法:

有必要的話你還得重寫以下這三個方法,但不是必須的:

使用asynctask類,以下是幾條必須遵守的準則:

AsyncTask原始碼分析

就從asynctask的構造方法開始分析 creates a new asynchronous task.this constructor must be invoked on the ui thread.public asynctask mfuture new futuretask mworker...

AsyncTask 原始碼分析

asynctask 內部實現原理主要是兩個執行緒池和乙個handler。兩個執行緒池分別為serialexecutor和threadpoolexecutor。其中serialexecutor是維護乙個有序佇列 threadpoolexecutor是執行任務的執行緒池。handler是internal...

7 0 AsyncTask原始碼分析

之前開發中經常使用asynctask進行非同步資料獲取,當時只限於使用,只知道大體的就是通過執行緒池 handler實現的封裝,具體的 細節沒有仔細看過,今天就閱讀一下原始碼,當作筆記。加深記憶 public asynctask mfuture new futuretask mworker catc...