Android基本功:異步任務(AsyncTask)


一、解決新線程無法更新UI組建問題的方案 

為了解決新線程不能更新UI組建的問題,Andorid提供了如下幾種解決方案: 

  • 使用Handler實現線程之間的通信。 

  • Activity.runOnUiThread(Runnable)。 

  • View.post(Runnable)。 

  • View.postDelayed(Runnable)。 

 

二、ANR(Application Not Responding)異常 

Android默認約定當UI線程阻塞超過20秒將會引發ANR(Application Not Responding)異常。但實際上,不要說20秒,即使是5秒甚至2秒,用戶都會感到十分不爽。因此,沒必要去記這個20秒的時間限度。總之,開發者必須牢記:不要在UI線程中執行一些耗時操作。 

 

三、AsyncTask抽象類 

AsyncTask<Params,Progress,Result>是一個抽象類,通常用於被繼承,繼承AsyncTask需要指定如下三個泛型參數: 

  • Params:啟動任務執行的輸入參數的類型。 

  • Progress:后台任務完成進度值的類型。 

  • Result:后台執行任務完成后返回結果的類型。 

 

四、AsyncTask的特點 

  • 更輕量級一些,適用於簡單的異步處理,不需要借助線程和Handler即可。 

 

五、使用AsyncTask的步驟 

 1.創建AsyncTask的子類,並為三個泛型參數指定類型。如果某個泛型參數不需要指定類型,可將它指定為void。 

  2.根據需要,實現AsyncTask的如下方法: 

       doInBackground(Params …):后台線程將要完成的任務,可以調用publishProgress(Progress... values)方法更新任務執行進度。 

       onProgressUpdate(Progress... values):在doInBackground()方法中調用publishProgress()方法更新任務的執行進度后,就會觸發該方法。 

       onPreExecute():執行后台耗時操作前被調用,通常用戶完成一些初始化操作,比如在界面上顯示進度條。 

       onPostExecute(Result result):當doInBackground()完成后,系統會自動調用onPostExecute()方法,並將doInBackground方法返回的值傳給該方法。 

  3.調用AsyncTask子類的實例的execute(Params... params)開始執行耗時任務。  

 

六、使用AsyncTask時必須遵守的規則 

  • 必須在UI線程中創建AsyncTask的實例。 

  • 必須在UI線程中調用AsyncTask的execute()方法。 

  • AsyncTask的onPreExecute()、onPostExecute(Result result)、doInBackground(Params... params)、onProgressUpdate(Progress... values)方法,不應該由程序員代碼調用,而是由Android系統負責調用。 

  • 每個AsyncTask只能被執行一次,多次調用將會引發異常。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM