/**
* 生成該類的物件,並呼叫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...