Android中非同步任務(AsyncTask)

山有木xi發表於2020-04-22

Android的UI執行緒主要負責處理使用者的按鍵事件、使用者觸屏事件和螢幕繪圖等事件,因此開發時的其他各類操作不能阻塞UI執行緒,否則UI介面就會停止響應,給使用者帶來糟糕的體驗

為了避免UI執行緒失去響應的問題,Android建議將耗時的操作放在新的執行緒中去完成,但是新執行緒也可以需要動態更新UI元件,例如:獲取網路資料後,新執行緒不允許直接更新UI元件

為了解決新執行緒不能更新UI元件的問題,Android提供了幾種解決方案

  1. 使用Hanlder

  2. Acitity.renOnuiThread(Runnable)

  3. View.post(Runnable)

  4. View.postDelayed(Runnable,long)

  5. ......

Hanlder的操作其實還算OK,主要是後面幾種方法可能導致程式設計略顯枯燥,這個時候使用AsyncTask可以簡化這種操作

AsyncTask<Parans,Progress,Result>是一個抽象類,通常用於被繼承,而被繼承則需腰指定這三個泛型引數

  1. Parans:啟動任務執行的輸入引數的型別

  2. Progress:後臺任務完成的進度值的型別

  3. Result:後臺執行任務完成後返回結果的型別

使用非同步操作其實只需要三步

  1. 建立 AsyncTask的子類,並且為三個泛型引數指定型別

  2. 實現 AsyncTask的方法

  3. 呼叫 AsyncTask的子類的execute開始執行耗時任務

使用execute時必須遵守的規則

  • 必須在UI執行緒中建立 AsyncTask的例項

  • 必須在UI執行緒中建立 AsyncTask 的例項的execute方法

  • AsyncTask的各個方法應該由Android系統呼叫而不是程式設計師

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

AsyncTask的方法有如下幾種

  1. doInBackground(Params...)

  2. onProgressUpdate(Progress...values)

  3. onPreExecute()

  4. onPoxtExecute()


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69917874/viewspace-2687656/,如需轉載,請註明出處,否則將追究法律責任。

相關文章