java.lang.object
? android.os.asynctask<params, progress, result>
asynctask是android提供的輕量級異步類;它在背景線程處理耗時的操作然後可以将處理的結果傳回給ui線程處理。由于它不涉及到使用thread和handler是以簡單易用。
首先上一段android developer的代碼:
<code></code>
private class downloadfilestask extends asynctask<url,
integer, long> {
protected long doinbackground(url... urls) {
int count = urls.length;
long totalsize = 0;
for (int i = 0; i < count; i++)
{
totalsize += downloader.downloadfile(urls[i]);
publishprogress((int) ((i / (float) count) * 100));
// escape early if cancel() is called
if (iscancelled()) break;
}
return totalsize;
}
protected void onprogressupdate(integer... progress) {
setprogresspercent(progress[0]);
protected void onpostexecute(long result) {
showdialog("downloaded " + result + " bytes");
}
//執行方式
//new downloadfilestask().execute(url1, url2, url3);
下面我們看一下具體的用法。
需要注意的是asynctask的三中泛型類型
params
啟動任務執行的輸入參數,比如http請求的url。
progress 背景任務執行的百分比。
result 背景執行任務最終傳回的結果,比如string。
讓我們看一下doinbackground這個方法。
protected abstract result doinbackground (params... params)
它接收類型為params的若幹參數,然後傳回類型為result的結果。
protected void onpostexecute (result result)
它在doinbackground之後被執行,參數就是doinbackground傳回的結果。
在asynctask被execute之前被執行,一般是做一些準備工作
在onpreexecute()執行完之後執行,背景線程執行耗時操作
在ui線程中執行。在 publishprogress(progress...)被調用之後執行
在ui線程中執行,在doinbackground()執行之後執行
1.asynctask需要在ui線程中加載
2.建構asynctask的子類需要在ui線程中
3.execute方法需要在ui線程中被調用
4.對于"the 4 steps"中的四個函數不要自己手動去調用
5.每個task對象隻能被execute一次,不然會報異常