相關資訊
本類常用軟件
-
福建農村信用社手機銀行客戶端下載下載量:584204
-
Windows優化大師下載量:416898
-
90美女秀(視頻聊天軟件)下載量:366961
-
廣西農村信用社手機銀行客戶端下載下載量:365699
-
快播手機版下載量:325855
最近在在做一個Android應用開發,都是用AsyncTask來完成后臺任務,簡單總結一下。
通常使用AsyncTask,是通過繼承這個超類來完成的,如:
class BackgroundTask extends AsyncTask { @Override protected Object doInBackground(Object... params) { return null; }}
復制代碼
子類必須重載 doInBackground方法!<>”里面的三個類型,依次代表執行參數類型、進度參數類型和結果參數類型。doInBackground的參數類型必須是執行參數類型,返回的類型必須和結果參數類型。這三個類型應該根據需要來定,其實用Object也可以,用的時候在做類型轉換。啟動一個AsyncTask,可以在這樣做:
BackgroudTask bt = new BackgroundTask();
bt.execute("param");
復制代碼
使用AsyncTask的容易犯下的錯誤是在doInBackground方法里面直接對UI元素進行操作。如果需要和UI進行交互,可以配合使用publishProgress和onProgressUpdate。比如
@Override protected Object doInbackground(Object... params) {
... publishProgress("完成了20%");
... publishProgress("完成了80%");
... return null;
}
protected void onProgressUpdate(Object... progress)
{ ... textView1.setText((String)progress[0]); ... }
復制代碼
這里onProgressUpdate是工作在UI線程的。
使用AsyncTask的另一個問題是關于cancel。實際上,單單調用AsyncTask對象的cancel方法,并不能停止doInBackground方法的繼續執行。通常比較接受的方法是設置一個標志位,也就是在每次執行前檢查一下某個變量的值(或者可以調用isCancelled方法判斷),來決定繼續執行還是停止。這種處理手段對于一些循環性的工作比較有用,但是對于一些循環性弱的工作可能并不怎么有效。這也算是AsyncTask的一個弱點。和Thread相比,AsyncTask還有一個弱點是效率的問題,這個可以在本文開頭給出的鏈接中找到相關的信息。
AsyncTask還有一個問題和onPreExecute方法有關。這個方法是工作在UI線程的。雖然是叫onPreExecute,但是doInBackground方法(也就是實際上的execute),并不會等待onPreExecute方法做完全部操作才開始執行。所以,一般還是不要用這個方法,可以在調用AsyncTask對象的execute方法之前就把該完成的操作完成,以免引起某些錯誤。
AsyncTask還有一個方法是onPostExecute,這個方法也是工作在UI線程,它是在doInBackground方法執行結束,并返回結果后調用。這個方法里面可以調用UI線程的startActivity,這樣可以實現完成大量后臺操作后,自動跳轉Activity的功能。這個方法里面也可以執行另一個AsyncTask的execute方法。