AsyncTask是一個輕量級的異步任務類,它可以從線程池中執行背景任務,然後把執行的進度和最終結果傳遞給主線程并在主線程更新UI。它封裝了Thread和Handler,通過它可以更友善的執行背景任務以及在主線程中更新UI。 注:并不太适合特别耗時的任務,太耗時用線程池。
public abstract class AsyncTask<Params,Progress,Result>
AsyncTask是一個抽象的泛型類,它提供了Params(參數類型),Progress(背景任務的執行進度的類型)和Result(背景任務傳回結果的類型)這三個泛型參數,如果AsyncTask不需要傳遞具體的參數,那麼這三個泛型的參數用Void來代替。
AsyncTask提供了4個核心方法,他們的含義如下:
(1)onPreExecute(),在主線程中執行,在異步任務執行前,此方法會被調用,一般用于一些準備工作,列如初始化進度條;
(2)doInBackground(Params...Params),線上程池中執行,此方法用于執行異步任務,params參數表示異步任務輸入參數。在此方法中可以通過publicProgress方法來更新任務的進度,publicProgress方法會調用onProgressUpdate方法。另外此方法需要傳回計算結果給onPostExecute方法;
(3)onProgressUpdate(Progress...values),在主線程中執行,當背景任務執行進度發生改變時,此方法會被調用;
(4)onPostExecute(Result result),在主線程中執行,在異步任務執行之後,此方法會被調用,其中result參數是背景任務的傳回值,即doInBackground()的傳回值。
AsyncTask在使用中的限制條件:
(1)AsyncTask必須在主線程中加載;
(2)AsyncTask的對象必須在主線程中建立;
(3)execute方法必須在UI線程中調用;
(4)不要在程式中直接調用onPreExecute(),onPostExecute(),doInBackground(),onProgressUpdate()方法;
(5)一個AsyncTask對象隻能執行一次,即隻能調用一次execute方法,否則會報運作時異常;