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...