日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android: 使用 AsyncTask

發布時間:2025/3/21 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android: 使用 AsyncTask 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

9.2.4??? 使用 AsyncTask

?

不過為了更加方便我們在子線程中對 UI 進行操作,Android 還提供了另外一些好用的工 具,AsyncTask 就是其中之一。借助 AsyncTask,即使你對異步消息處理機制完全不了解, 也可以十分簡單地從子線程切換到主線程。當然,AsyncTask 背后的實現原理也是基于異步 消息處理機制的,只是 Android 幫我們做了很好的封裝而已。

首先來看一下 AsyncTask 的基本用法,由于 AsyncTask 是一個抽象類,所以如果我們想 使用它,就必須要創建一個子類去繼承它。在繼承時我們可以為 AsyncTask 類指定三個泛型 參數,這三個參數的用途如下。

1.??? Params

在執行?AsyncTask 時需要傳入的參數,可用于在后臺任務中使用。

2.??? Progress

后臺任務執行時,如果需要在界面上顯示當前的進度,則使用這里指定的泛型作為 進度單位。

3.??? Result

當任務執行完畢后,如果需要對結果進行返回,則使用這里指定的泛型作為返回值 類型。

因此,一個最簡單的自定義 AsyncTask 就可以寫成如下方式:

?

class DownloadTask extends AsyncTask<Void, Integer, Boolean> {

……

}

這里我們把 AsyncTask 的第一個泛型參數指定為 Void,表示在執行 AsyncTask 的時候不 需要傳入參數給后臺任務。第二個泛型參數指定為 Integer,表示使用整型數據來作為進度顯 示單位。第三個泛型參數指定為 Boolean,則表示使用布爾型數據來反饋執行結果。

當然,目前我們自定義的 DownloadTask 還是一個空任務,并不能進行任何實際的操作, 我們還需要去重寫 AsyncTask 中的幾個方法才能完成對任務的定制。經常需要去重寫的方法 有以下四個。

1.??? onPreExecute()

這個方法會在后臺任務開始執行之前調用,用于進行一些界面上的初始化操作,比 如顯示一個進度條對話框等。

2.??? doInBackground(Params...)

這個方法中的所有代碼都會在子線程中運行,我們應該在這里去處理所有的耗時任 務。任務一旦完成就可以通過 return 語句來將任務的執行結果返回,如果 AsyncTask 的 第三個泛型參數指定的是 Void,就可以不返回任務執行結果。注意,在這個方法中是不 可以進行 UI 操作的,如果需要更新 UI 元素,比如說反饋當前任務的執行進度,可以調 用 publishProgress(Progress...)方法來完成。

3.??? onProgressUpdate(Progress...)

當在后臺任務中調用了 publishProgress(Progress...)方法后,這個方法就會很快被調 用,方法中攜帶的參數就是在后臺任務中傳遞過來的。在這個方法中可以對 UI 進行操 作,利用參數中的數值就可以對界面元素進行相應地更新。

4.??? onPostExecute(Result)

當后臺任務執行完畢并通過 return 語句進行返回時,這個方法就很快會被調用。返 回的數據會作為參數傳遞到此方法中,可以利用返回的數據來進行一些 UI 操作,比如 說提醒任務執行的結果,以及關閉掉進度條對話框等。

因此,一個比較完整的自定義 AsyncTask 就可以寫成如下方式:

?

class DownloadTask extends AsyncTask<Void, Integer, Boolean> {

?

?@Override

protected void onPreExecute() {

progressDialog.show(); // 顯示進度對話框

}

?

@Override

protected Boolean doInBackground(Void... params) {

try {

while (true) {

int downloadPercent = doDownload(); // 這是一個虛構的方法

publishProgress(downloadPercent);

if (downloadPercent >= 100) {

break;

}

}

} catch (Exception e) {

return false;

}

return true;

}

?

@Override

protected void onProgressUpdate(Integer... values) {

// 在這里更新下載進度

progressDialog.setMessage("Downloaded " + values[0] + "%");

}

?

?

@Override

protected void onPostExecute(Boolean result) {

progressDialog.dismiss(); // 關閉進度對話框

// 在這里提示下載結果

if (result) {

Toast.makeText(context, "Download succeeded", Toast.LENGTH_SHORT).show();

} else {

Toast.makeText(context, " Download failed", Toast.LENGTH_SHORT).show();

}

}

}

?

在這個 DownloadTask 中,我們在 doInBackground()方法里去執行具體的下載任務。這個方法里的代碼都是在子線程中運行的,因而不會影響到主線程的運行。注意這里虛構了一個 doDownload()方法,這個方法用于計算當前的下載進度并返回,我們假設這個方法已經存在 了 。 在 得 到 了 當 前 的 下 載 進 度 后 , 下 面 就 該 考 慮 如 何 把 它 顯 示 到 界 面 上 了 , 由 于 doInBackground()方法是在子線程中運行的,在這里肯定不能進行 UI 操作,所以我們可以調 用 publishProgress()方法并將當前的下載進度傳進來,這樣 onProgressUpdate()方法就會很快 被調用,在這里就可以進行 UI 操作了。

當下載完成后,doInBackground()方法會返回一個布爾型變量,這樣 onPostExecute()方 法就會很快被調用,這個方法也是在主線程中運行的。然后在這里我們會根據下載的結果來 彈出相應的 Toast 提示,從而完成整個 DownloadTask 任務。

簡單來說,使用 AsyncTask 的訣竅就是,在 doInBackground()方法中去執行具體的耗時 任務,在 onProgressUpdate()方法中進行 UI 操作,在 onPostExecute()方法中執行一些任務的 收尾工作。

如果想要啟動這個任務,只需編寫以下代碼即可:

new DownloadTask().execute();

以上就是 AsyncTask 的基本用法,怎么樣,是不是感覺簡單方便了許多?我們并不需要 去考慮什么異步消息處理機制,也不需要專門使用一個 Handler 來發送和接收消息,只需要 調用一下 publishProgress()方法就可以輕松地從子線程切換到 UI 線程了。

總結

以上是生活随笔為你收集整理的android: 使用 AsyncTask的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 午夜视频免费观看 | 三级国产视频 | 一级片欧美 | 欧美特一级片 | 久久精品aⅴ无码中文字字幕重口 | 先锋资源中文字幕 | 会喷水的亲姐姐 | 亚洲区第一页 | 国产福利资源 | 韩国三级与黑人 | 国产一区二区三区在线免费观看 | 操伊人 | 91精品国产乱码久久久久久久久 | 国产精品一区不卡 | 亚洲成a人v欧美综合天堂麻豆 | 97精品国产97久久久久久免费 | 亚洲欧美日韩中文字幕在线观看 | 葵司有码中文字幕二三区 | 久久97人妻无码一区二区三区 | 久久免费激情视频 | 自拍视频在线观看 | 亚洲精品成人在线视频 | 日韩亚洲精品在线 | 国产精品久久久久久久免费观看 | 亚洲免费视频网站 | 中文在线不卡视频 | 色老头av| 欧美影院久久 | 日韩大片免费观看视频播放 | 已满十八岁免费观看全集动漫 | 免费在线国产精品 | 日本不卡一区在线 | 美女扒开腿让男人操 | 在线观看免费大片 | 午夜在线观看视频18 | 精品国产av一区二区 | 人人草人人插 | 日韩视频三区 | 欧产日产国产69 | 免费在线观看黄色 | 乖女从小调教h尿便器小说 欧美韩一区二区 | 日日射天天操 | 国产区在线视频 | 青青伊人网 | 久久精品日韩 | 日韩乱码人妻无码中文字幕 | 北条麻妃在线一区二区 | 美日韩在线 | 亚洲免费影视 | 亚洲专区中文字幕 | 久久网页| 亚洲色域网 | 男女无遮挡做爰猛烈视频 | 啪啪导航 | 精品无码免费视频 | 美女毛毛片 | 亚洲乱码在线 | 亚洲一二三四区 | 熟妇一区二区三区 | 男同av在线观看一区二区三区 | 欧美在线视频第一页 | 免费特级毛片 | 97免费在线观看视频 | 三上悠亚 电影 | 好吊色一区二区三区 | 国产精品一二 | a级在线免费观看 | 伊人精品视频 | 国产一区导航 | 国产91精品在线观看 | 国产精品久久在线 | 白丝久久| 黑料av在线 | 黄站在线观看 | 中文字幕亚洲日本 | 操综合 | 中文理论片 | 视频网站在线观看18 | 国产少妇一区二区 | 亚洲精品乱码久久久久久写真 | 久久久久久久久久久久久久久久久久久久 | 欧美韩日精品 | 相亲对象是问题学生动漫免费观看 | 久久精品女人毛片国产 | 一级大片在线观看 | 蜜色视频| 久久嫩草视频 | 中文字幕国产日韩 | juliaann办公室丝袜大战 | 丁香色欲久久久久久综合网 | 免费av观看网址 | 四虎视频国产精品免费入口 | 日韩欧美色| 福利91 | 欧美日韩免费观看一区=区三区 | 中文字幕无码不卡免费视频 | 一级片少妇 | 在线观看h视频 | www.男人天堂 |