深入淺出談Android多線(xiàn)程及AsyncTask機制
onPostExecute(Result... result): 當我們的異步任務(wù)執行完之后,就會(huì )將結果返回給這個(gè)方法,這個(gè)方法也是在UI Thread當中調用的,我們可以將返回的結果顯示在UI控件上
本文引用地址:http://dyxdggzs.com/article/201807/383682.htm為什么我們的AsyncTask抽象類(lèi)只有一個(gè) doInBackground 的抽象方法呢??原因是,我們如果要做一個(gè)異步任務(wù),我們必須要為其開(kāi)辟一個(gè)新的Thread,讓其完成一些操作,而在完成這個(gè)異步任務(wù)時(shí),我可能并不需要彈出要給ProgressDialog,我并不需要隨時(shí)更新我的ProgressDialog的進(jìn)度條,我也并不需要將結果更新給我們的UI界面,所以除了 doInBackground 方法之外的三個(gè)方法,都不是必須有的,因此我們必須要實(shí)現的方法是 doInBackground 方法。
五、通過(guò)AsyncTask來(lái)從網(wǎng)絡(luò )上下載一張圖片
下面我們就通過(guò)兩個(gè)代碼示例,來(lái)看看如何通過(guò)AsyncTask來(lái)從網(wǎng)絡(luò )上下載一張圖片,并更新到我們的ImageView控件上。
①下載圖片時(shí),彈出一個(gè)ProgressDialog,但是不顯示實(shí)時(shí)進(jìn)度
我們來(lái)看看布局文件:

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

接下來(lái)我們來(lái)看看我們的Activity代碼:



我們來(lái)看看效果圖:
②帶有進(jìn)度條更新的下載一張網(wǎng)絡(luò )圖片
下面這個(gè)代碼示例,將會(huì )在下載圖片的時(shí)候,顯示進(jìn)度條的更新,配置文件都不變,我們來(lái)看看Activity代碼:




我們來(lái)看看效果圖:

這樣我們就能夠通過(guò)AsyncTask來(lái)實(shí)現從網(wǎng)絡(luò )中下載一張圖片,然后將其更新到UI控件中,并時(shí)時(shí)刻刻的更新當前的進(jìn)度這個(gè)功能了。
六、AsyncTask的重要知識點(diǎn)
在上面兩節已經(jīng)詳細講解了AsyncTask的工作原理了,這里我們還要補充一下AsyncTask的一些其他知識點(diǎn):
1.Cancelling a Task
我們可以在任何時(shí)刻來(lái)取消我們的異步任務(wù)的執行,通過(guò)調用 cancel(boolean)方法,調用完這個(gè)方法后系統會(huì )隨后調用 isCancelled() 方法并且返回true。如果調用了這個(gè)方法,那么在 doInBackgroud() 方法執行完之后,就不會(huì )調用 onPostExecute() 方法了,取而代之的是調用 onCancelled() 方法。為了確保Task已經(jīng)被取消了,我們需要經(jīng)常調用 isCancelled() 方法來(lái)判斷,如果有必要的話(huà)。
2.在使用AsyncTask做異步任務(wù)的時(shí)候必須要遵循的原則:
- AsyncTask類(lèi)必須在UI Thread當中加載,在Android Jelly_Bean版本后這些都是自動(dòng)完成的
- AsyncTask的對象必須在UI Thread當中實(shí)例化
- execute方法必須在UI Thread當中調用
- 不要手動(dòng)的去調用AsyncTask的onPreExecute, doInBackground, publishProgress, onProgressUpdate, onPostExecute方法,這些都是由Android系統自動(dòng)調用的
- AsyncTask任務(wù)只能被執行一次
到此,有關(guān)AsyncTask的總結就到此為止了,本篇隨筆主要講解了Android中的多線(xiàn)程知識,并且詳細地講解了 AsyncTask 異步任務(wù)的概念和實(shí)現機制,并通過(guò)實(shí)例來(lái)了解 AsyncTask 的執行過(guò)程,最后還補充了 AsyncTask 的一些重要知識點(diǎn),包括如何取消一個(gè) AsyncTask 以及,我們在使用 AsyncTask 時(shí)所必須遵循的規則。
評論