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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android应用开发—AsyncTask

發(fā)布時間:2025/4/5 Android 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android应用开发—AsyncTask 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

摘錄自 Android 多線程—–AsyncTask詳解

AsyncTask

  • AsyncTask:異步任務(wù),從字面上來說,就是在我們的UI主線程運(yùn)行的時候,異步的完成一些操作。AsyncTask允許我們的執(zhí)行一個異步的任務(wù)在后臺。我們可以將耗時的操作放在異步任務(wù)當(dāng)中來執(zhí)行,并隨時將任務(wù)執(zhí)行的結(jié)果返回給我們的UI線程來更新我們的UI控件。通過AsyncTask我們可以輕松的解決多線程之間的通信問題。

  • 怎么來理解AsyncTask呢?通俗一點(diǎn)來說,AsyncTask就相當(dāng)于Android給我們提供了一個多線程編程的一個框架,其介于Thread和Handler之間,我們?nèi)绻x一個AsyncTask,就需要定義一個類來繼承AsyncTask這個抽象類,并實現(xiàn)其唯一的一個 doInBackgroud 抽象方法。要掌握AsyncTask,我們就必須要一個概念,總結(jié)起來就是: 3個泛型,4個步驟。

  • 3個泛型指的是什么呢?我們來看看AsyncTask這個抽象類的定義,當(dāng)我們定義一個類來繼承AsyncTask這個類的時候,我們需要為其指定3個泛型參數(shù):

AsyncTask <Params, Progress, Result> Params: 這個泛型指定的是我們傳遞給異步任務(wù)執(zhí)行時的參數(shù)的類型 Progress: 這個泛型指定的是我們的異步任務(wù)在執(zhí)行的時候?qū)?zhí)行的進(jìn)度返回給UI線程的參數(shù)的類型 Result: 這個泛型指定的異步任務(wù)執(zhí)行完后返回給UI線程的結(jié)果的類型我們在定義一個類繼承AsyncTask類的時候,必須要指定好這三個泛型的類型,如果都不指定的話,則都將其寫成Void, 例如: AsyncTask <Void, Void, Void>
  • 4個步驟:當(dāng)我們執(zhí)行一個異步任務(wù)的時候,其需要按照下面的4個步驟分別執(zhí)行

    • onPreExecute():
      這個方法是在執(zhí)行異步任務(wù)之前的時候執(zhí)行,并且是在UI Thread當(dāng)中執(zhí)行的,通常我們在這個方法里做一些UI控件的初始化的操作,例如彈出要給ProgressDialog
    • doInBackground(Params… params): 在onPreExecute()方法執(zhí)行完之后,會馬上執(zhí)行這個方法,這個方法就是來處理異步任務(wù)的方法,Android操作系統(tǒng)會在后臺的線程池當(dāng)中開啟一個worker thread來執(zhí)行我們的這個方法,所以這個方法是在worker thread當(dāng)中執(zhí)行的,這個方法執(zhí)行完之后就可以將我們的執(zhí)行結(jié)果發(fā)送給我們的最后一個 onPostExecute 方法,在這個方法里,我們可以從網(wǎng)絡(luò)當(dāng)中獲取數(shù)據(jù)等一些耗時的操作
    • onProgressUpdate(Progess… values): 這個方法也是在UI Thread當(dāng)中執(zhí)行的,我們在異步任務(wù)執(zhí)行的時候,有時候需要將執(zhí)行的進(jìn)度返回給我們的UI界面,例如下載一張網(wǎng)絡(luò)圖片,我們需要時刻顯示其下載的進(jìn)度,就可以使用這個方法來更新我們的進(jìn)度。這個方法在調(diào)用之前,我們需要在 doInBackground 方法中調(diào)用一個 publishProgress(Progress) 的方法來將我們的進(jìn)度時時刻刻傳遞給 onProgressUpdate 方法來更新
    • onPostExecute(Result… result): 當(dāng)我們的異步任務(wù)執(zhí)行完之后,就會將結(jié)果返回給這個方法,這個方法也是在UI Thread當(dāng)中調(diào)用的,我們可以將返回的結(jié)果顯示在UI控件上

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

總結(jié)

以上是生活随笔為你收集整理的Android应用开发—AsyncTask的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。