Android AsyncTask幾個注意事項

來源:互聯網
上載者:User

CSDN上的這個系列文章《Android非同步處理系列文章索引》對AsyncTask講解的很清楚,特別是其中的幾個例子特別好。最近在在做一個Android應用開發,都是用AsyncTask來完成背景工作,簡單總結一下。

 

通常使用AsyncTask,是通過繼承這個超類來完成的,如:

class BackgroundTask extends AsyncTask<Object,Object,Object> 
{
@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方法。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.