色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > Android異步加載AsyncTask的使用

Android異步加載AsyncTask的使用 時間:2018-09-26      來源:未知

Android系統(tǒng)給我們提供了AsyncTask這樣一個類,來幫助我們快速實現(xiàn)多線程開發(fā),它的底層實現(xiàn),其實就是一個線程池。

AsyncTask,顧名思義就是用來做異步處理的。通過AsyncTask,我們可以非常方便的解決多線程,以及多線程之間的通信問題。

AsyncTask參數(shù)

抽象類AsyncTask具有三個泛型參數(shù):

AsyncTask

Params: 這個泛型指定的是我們傳遞給異步任務執(zhí)行時的參數(shù)的類型

Progress: 這個泛型指定的是我們的異步任務在執(zhí)行的時候將執(zhí)行的進度返回給UI線程的參數(shù)的類型

Result: 這個泛型指定的異步任務執(zhí)行完后返回給UI線程的結果的類型

我們在創(chuàng)建AsyncTask的時候,需要指定這三個參數(shù)。

AsyncTask方法

AsyncTask具有這樣幾個抽象方法:

onPreExecute(): 這個方法是在執(zhí)行異步任務之前的時候執(zhí)行,并且是在UI Thread當中執(zhí)行的,通常我們在這個方法里做一些UI控件的初始化的操作,例如彈出ProgressDialog

doInBackground(Params... params): 在onPreExecute()方法執(zhí)行完之后,會馬上執(zhí)行這個方法,這個方法就是來處理異步任務的方法,

Android操作系統(tǒng)會在后臺的線程池當中開啟一個worker thread來執(zhí)行我們的這個方法,所以這個方法是在worker thread當中執(zhí)行的,這個方法執(zhí)行完之后就可以將我們的執(zhí)行結果發(fā)送給我們的后一個 onPostExecute 方法,因此,doInBackground是這四個方法中唯一必須要重寫的方法,在這個方法中,我們可以從網(wǎng)絡當中獲取數(shù)據(jù)等一些耗時操作

onProgressUpdate(Progess... values): 這個方法也是在UI Thread當中執(zhí)行的,我們在異步任務執(zhí)行的時候,

有時候需要將執(zhí)行的進度返回給我們的UI界面,例如下載一張網(wǎng)絡圖片,我們需要時刻顯示其下載的進度,

就可以使用這個方法來更新我們的進度。這個方法在調用之前,我們需要在 doInBackground 方法中

調用一個 publishProgress(Progress) 的方法來將我們的進度時時刻刻傳遞給 onProgressUpdate 方法從而來更新進度

onPostExecute(Result... result): 當我們的異步任務執(zhí)行完之后,就會將結果返回給這個方法,這個方法也是在UI Thread當中調用的,

我們可以將返回的結果顯示在UI控件上

AsyncTask使用

現(xiàn)在回到我們的例子中,我們利用AsyncTask來下載圖像,當然,下載圖像的方法還是使用那個getBitmapFromUrl()方法。首先,我們先寫一個ASyncDownloadImage類,繼承AsyncTask:

private class ASyncDownloadImage extends AsyncTask {

private ImageView imageView;

private String url;

public ASyncDownloadImage(ImageView imageView, String url) {

this.imageView = imageView;

this.url = url;

}

@Override

protected Bitmap doInBackground(String... params) {

return getBitmapFromUrl(params[0]);

}

@Override

protected void onPostExecute(Bitmap bitmap) {

super.onPostExecute(bitmap);

if (imageView.getTag().equals(url)) {

imageView.setImageBitmap(bitmap);

}

}

}

這個AsyncTask我們重寫了doInBackground用來異步下載圖像,重寫了onPostExecute來將圖像設置到ImageView上。因此,我們將AsyncTask的三個泛型參數(shù)設置為:

AsyncTask

即參數(shù)類型為String——url,進度類型——Void 不需要,返回類型——Bitmap 下載的圖像。在設置圖像的時候,我們同樣需要通過tag來進行判斷。

后,我們與使用多線程一樣,創(chuàng)建一個showImageByASync方法,來調用AsyncTask:

/**

* Using ASyncTask

* @param imageView

* @param url

*/

public void showImageByASync(ImageView imageView, String url) {

ASyncDownloadImage task = new ASyncDownloadImage(imageView, url);

task.execute(url);

}

AsyncTask中有幾個地方還是需要注意下的:

execute方法只能在UI線程中調用

AsyncTask實例也必須在UI線程中創(chuàng)建

AsyncTask的抽象方法不要手動去調用,系統(tǒng)自動會去管理

AsyncTask只能執(zhí)行一次

后,只需要將Adapter中的getView方法的mImageLoader.showImageByThread(viewHolder.imageView, url);改為如下所示即可:

mImageLoader.showImageByASync(viewHolder.imageView, url);

上一篇:Linux下多線程機制

下一篇:關于C語言的隱式類型轉換

熱點文章推薦
華清學員就業(yè)榜單
高薪學員經(jīng)驗分享
熱點新聞推薦
前臺專線:010-82525158 企業(yè)培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網(wǎng)安備11010802025203號

回到頂部

色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区
主站蜘蛛池模板: 国产91精品青草社区| 国产网站欧美日韩免费精品在线观看| 亚洲毛茸茸少妇高潮呻吟| 97在线看免费观看视频在线观看| 亚洲女人天堂视频| 国产精品免费小视频| 欧美高清在线视频观看不卡| 国产午夜精品免费一区二区三区 | 欧美精品18videos性欧| 亚洲男人第一av网站| 国产精品一二三在线| 国内揄拍国内精品少妇国语| 日韩专区在线播放| 精品视频一区在线视频| 国产在线拍偷自揄拍精品| 性欧美xxxx| 欧美日韩亚洲天堂| www.欧美视频| 亚洲欧美变态国产另类| 92看片淫黄大片欧美看国产片| 欧美在线观看网址综合| 欧美贵妇videos办公室| 精品国产一区二区三区四区在线观看 | 亚洲欧洲国产伦综合| 成人激情视频网| 国产精品爱久久久久久久| 久久久午夜视频| 欧美视频中文字幕在线| 久久精品免费电影| 亚洲欧洲中文天堂| 日韩精品视频在线免费观看| 成人黄色免费看| 国产精自产拍久久久久久蜜| 日本亚洲欧美成人| 欧洲中文字幕国产精品| 97人人爽人人喊人人模波多| 欧美激情视频给我| 久久全国免费视频| 午夜精品理论片| 97精品久久久| 2019中文在线观看|