用AsyncTask處理UI執行緒阻塞問題
阿新 • • 發佈:2019-02-02
三個泛型型別引數代表了“啟動任務執行的引數”“後臺任務和前臺UI共享的引數”和“後臺最後計算結果引數”,不一定要用,如果沒有被用,可以用java.lang.Void型別代替。
使用時要重寫的幾個方法:
1.execute(Params... params),需要我們在程式碼中呼叫此方法觸發執行非同步任務。
2.onPreExecute(),在execute(Params... params)被呼叫後立即執行,般用來在執行後臺任務前對UI做一些標記。
3.doInBackground(Params... params),在onPreExecute()成後立即執行,用於執行較為費時的操作,此方法將接收輸入引數和返回計算結果。在執行過程中可以呼叫publishProgress(Progress... values)來更新進度資訊。
4.onProgressUpdate(Progress... values),在呼叫publishProgress(Progress... values)時,此方法被執行,直接將進度資訊更新到UI元件上。
5.onPostExecute(Result result),當後臺操作結束時,此方法將會被呼叫,計算結果將做為引數傳遞到此方法中,直接將結果顯示到UI元件上。
在使用的時候,有幾點需要格外注意:
1. 非同步任務的例項必須在UI執行緒中建立。
2. execute(Params... params)方法必須在UI執行緒中呼叫。
3. 不要手動呼叫onPreExecute(),doInBackground(Params... params),onProgressUpdate(Progress... values),onPostExecute(Result result)這幾個方法。
4. 不能在 doInBackground(Params... params)中更改UI元件的資訊。
5. 一個任務例項只能執行一次,如果執行第二次將會丟擲異常。