AsyncTask的簡單使用

2021-08-01 19:58:54 字數 2017 閱讀 7563

android的ui操作不是執行緒安全的,所以一些好事操作要放在子執行緒中去執行。今天我們來了解下asynctask。

為什麼要使用asynctask?

1、我們不需要自己建立子執行緒,asynctask內部已經封裝好了乙個執行緒池去執行耗時操作。

2、不需要自己寫相應的方法去更新ui介面

3、asynctask已經包含了所有子執行緒和ui執行緒處理的操作。

如何使用asynctask

1、建立子類繼承asynctask

/**

* 繼承asynctask是需要指定3個泛型

* 第乙個泛型: 執行asynctask傳入的引數型別execute(引數), 還是doinbackground得入參型別

* 第二個泛型: 想使用者提示任務進度的使用的引數型別,可以使用void說明不傳任何型別

* 第三個泛型: doinbackground的返回值型別,onpostexecute的入參型別

* */

class mytask extends asynctask{

2、複寫asynctask的抽象方法,完成耗時操作並在主線程中重新整理ui

/**

* 當呼叫asynctask.execute方法隻後此方法立即被呼叫

* 在主線程中執行,做一些準備工作

*/@override

protected void onpreexecute() {

super.onpreexecute();

/**

* 在子執行緒中執行耗時操作

* 入參是第乙個泛型型別

* 返回值型別是第三個泛型型別

*/@override

protected string doinbackground(string... params) {

/**

* 當doinbackground執行完之後立即執行

* 在主線程中執行

* 入參是doinbackground的返回值

*/@override

protected void onpostexecute(string result) {

super.onpostexecute(result);

3、呼叫asynctask.execute( )方法執行非同步任務

mytask task = new mytask();

task.execute("aaa");

下面介紹下asynctask執行週期中的一些方法

onpreexecute:

是第乙個被呼叫的方法,在ui執行緒中執行,主要做一些後台任務啟動前的準備工作,比如show出乙個progress

doinbackground:

第二個別呼叫的方法,在子執行緒中執行,處理耗時操作,並將結果返回給onpostexecute,該方法由系統呼叫,不需要人為呼叫,入參就是asynctask第乙個泛型引數所指的型別,返回值是第三個泛型引數所指的型別。

publishprogress():

引數型別是asynctask第二個泛型引數所指的型別,此方法在doinbackground中呼叫,並每當呼叫一次此方法,onprogressupdate就會被呼叫

onprogressupdate:

第三個被呼叫的方法,需要在

doinbackground中呼叫

publishprogress()才會被呼叫,入參就是

asynctask第二個泛型引數所指的型別,就是publishprogress的傳入引數型別。

onpostexecute:

第四個被呼叫的方法,在ui執行緒中執行,入參就是doinbackground返回值

1、建立子類繼承asynctask

2、複寫asynctask的抽象方法,完成耗時操作並在主線程中重新整理ui

3、呼叫asynctask.execute()方法執行非同步任務

AsyncTask 簡單使用

import import android.os.asynctask import android.os.bundle import android.widget.progressbar import android.widget.textview public class myasynctaskd...

AsyncTask 簡單使用

asynctask 非同步任務,用來處理一般耗時任務 是對handler 封裝,便於使用。主要方法說明 params 表示用於asynctask執行任務的引數的型別 progress 表示在後台執行緒處理的過程中,可以階段性地發布結果的資料型別 result 表示任務全部完成後所返回的資料型別 cl...

簡單的非同步處理AsyncTask

1.首先建立 asynctask 然後 execute params.params 執行開啟乙個非同步任務 重寫其中的方法 2.onpreexecute 在execute params.params 被呼叫後立即執行 準備過程 在執行後台任務前做一些ui操作 3.doinbackground par...