Android 非同步任務AsyncTask

2021-06-26 19:50:04 字數 1858 閱讀 5385

handler本身並沒有建立子執行緒。如果要在子執行緒中執行任務,必須使用者自己建立子執行緒,然後在子執行緒中呼叫handler.sendmessage()更新ui。

android提供另乙個類asynctask執行這樣的非同步任務。asynctask類會建立子執行緒,其內部封裝了handler。

asynctask是乙個抽象類,它定義了三個泛型引數。

1.params:啟動任務執行的輸入引數型別。

2.progress:任務進行時的引數型別。

3.result:任務執行完後返回的結果型別。

繼承asynctask一般需要重寫以下幾個方法。

1.onpreexecute():執行任務之前呼叫。

2.doinbackground(params... params):真正執行任務的方法。在該方法中呼叫publishprogress(progress... values)方法可以更新任務執行進度。

3.onprogressupdate(progress... values):更新任務執行進度。在doinbackground(params... params)中呼叫publishprogress(progress... values)方法將會觸發該方法。

4.onpostexecute(result result):doinbackground(params... params)方法執行完畢後,系統自動呼叫該方法,並將返回值傳遞給該方法。

呼叫asynctask.execute(params... params)方法即可啟動任務。

使用asynctask需要注意一下幾點:

1.asynctask必須在ui執行緒中例項化。

2.必須在ui執行緒中呼叫asynctask.execute(params... params)方法。

3.每個asynctask只能執行一次,多次呼叫會丟擲錯誤。

下面是乙個例子。

activity類:

package com.zzj.ui.asynctaskdemo;

import android.os.asynctask;

import android.os.bundle;

import android.view.view;

import android.widget.textview;

import com.zzj.ui.r;

public class asynctaskactivity extends activity

public void download(view v)

class asyncdownload extends asynctask catch (interruptedexception e)

if (p >= 100) else

}} @override

protected void onpreexecute()

@override

protected void onprogressupdate(integer... values)

@override

protected void onpostexecute(string result)

}}

布局檔案:
<?xml version="1.0" encoding="utf-8"?>

效果:

我們可以看到:doinbackground方法在子執行緒中執行,其他都在ui主線程中執行。

Android非同步任務 AsyncTask 筆記

像handler訊息傳遞機制類似,android官方提供的專門用於處理耗時超作,並及時更新ui元件的乙個抽象類.常用於耗時操作,如網路操作,資料庫操作,等大量的耗時操作.asynctask是個抽象類,這一屬性決定我們運用時要繼承該類,並實現該類中的方法.params 1.execute params...

Android 非同步任務AsyncTask

首先,繼承asynctask 引數說明如下 params標示輸入引數。progress標示子執行緒執行的百分比。result標示返回值型別。根據需求實現如下方法 onpreexecute 方法。doinbackground params.params 方法。publishprogress param...

android非同步任務之IntentService

這裡我們來看看原始碼,intentservice的 很少,很簡單。在第一次oncreat的時候,建立了乙個handlerthread。然後建立了乙個handler,將handlerthread的loop傳了進去,相當於這個handler的執行已經是非同步了。1 oncreat handlerthre...