新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 深入淺出談Android多線程及AsyncTask機制

深入淺出談Android多線程及AsyncTask機制

作者: 時間:2018-07-24 來源:網(wǎng)絡(luò) 收藏

onPostExecute(Result... result): 當我們的異步任務(wù)執(zhí)行完之后,就會將結(jié)果返回給這個方法,這個方法也是在UI Thread當中調(diào)用的,我們可以將返回的結(jié)果顯示在UI控件上

本文引用地址:http://www.butianyuan.cn/article/201807/383682.htm

為什么我們的AsyncTask抽象類只有一個 doInBackground 的抽象方法呢??原因是,我們?nèi)绻鲆粋€異步任務(wù),我們必須要為其開辟一個新的Thread,讓其完成一些操作,而在完成這個異步任務(wù)時,我可能并不需要彈出要給ProgressDialog,我并不需要隨時更新我的ProgressDialog的進度條,我也并不需要將結(jié)果更新給我們的UI界面,所以除了 doInBackground 方法之外的三個方法,都不是必須有的,因此我們必須要實現(xiàn)的方法是 doInBackground 方法。

五、通過AsyncTask來從網(wǎng)絡(luò)上下載一張圖片

下面我們就通過兩個代碼示例,來看看如何通過AsyncTask來從網(wǎng)絡(luò)上下載一張圖片,并更新到我們的ImageView控件上。

①下載圖片時,彈出一個ProgressDialog,但是不顯示實時進度

我們來看看布局文件:

就是很簡單的一個ImageView控件和一個Button控件,當點擊Button控件時,彈出一個ProgressDialog,然后開啟一個異步任務(wù),從網(wǎng)絡(luò)中下載一張圖片,并更新到我們的ImageView上。這里還要注意一點,如果我們要使用手機訪問網(wǎng)絡(luò),必須還要給其授權(quán)才行,在后續(xù)的學(xué)習(xí)當中,將會詳細講解當中的授權(quán)的知識。我們來看看

Manifest.xml文件:

接下來我們來看看我們的Activity代碼:

我們來看看效果圖:

②帶有進度條更新的下載一張網(wǎng)絡(luò)圖片

下面這個代碼示例,將會在下載圖片的時候,顯示進度條的更新,配置文件都不變,我們來看看Activity代碼:

我們來看看效果圖:

這樣我們就能夠通過AsyncTask來實現(xiàn)從網(wǎng)絡(luò)中下載一張圖片,然后將其更新到UI控件中,并時時刻刻的更新當前的進度這個功能了。

六、AsyncTask的重要知識點

在上面兩節(jié)已經(jīng)詳細講解了AsyncTask的工作原理了,這里我們還要補充一下AsyncTask的一些其他知識點:

1.Cancelling a Task

我們可以在任何時刻來取消我們的異步任務(wù)的執(zhí)行,通過調(diào)用 cancel(boolean)方法,調(diào)用完這個方法后系統(tǒng)會隨后調(diào)用 isCancelled() 方法并且返回true。如果調(diào)用了這個方法,那么在 doInBackgroud() 方法執(zhí)行完之后,就不會調(diào)用 onPostExecute() 方法了,取而代之的是調(diào)用 onCancelled() 方法。為了確保Task已經(jīng)被取消了,我們需要經(jīng)常調(diào)用 isCancelled() 方法來判斷,如果有必要的話。

2.在使用AsyncTask做異步任務(wù)的時候必須要遵循的原則:

- AsyncTask類必須在UI Thread當中加載,在 Jelly_Bean版本后這些都是自動完成的

- AsyncTask的對象必須在UI Thread當中實例化

- execute方法必須在UI Thread當中調(diào)用

- 不要手動的去調(diào)用AsyncTask的onPreExecute, doInBackground, publishProgress, onProgressUpdate, onPostExecute方法,這些都是由Android系統(tǒng)自動調(diào)用的

- AsyncTask任務(wù)只能被執(zhí)行一次

到此,有關(guān)AsyncTask的總結(jié)就到此為止了,本篇隨筆主要講解了Android中的知識,并且詳細地講解了 AsyncTask 異步任務(wù)的概念和實現(xiàn)機制,并通過實例來了解 AsyncTask 的執(zhí)行過程,最后還補充了 AsyncTask 的一些重要知識點,包括如何取消一個 AsyncTask 以及,我們在使用 AsyncTask 時所必須遵循的規(guī)則。


上一頁 1 2 下一頁

關(guān)鍵詞: Android 多線程 AsyncTask機制

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉