深入研究AsyncTask

來源:互聯網
上載者:User

AsyncTask提供了一種在後台執行操作而在UI線程顯示結果的方式,而且開發人員不必操作線程或者handler.
一個AsyncTask定義了三種泛型分別是Params,Progress,Result,還有四個函數分別是onPreExecute ,doInBackground onProgressUpdate,onPostExecute.

AsyncTask必須寫子類繼承來使用.例如

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {     protected Long doInBackground(URL... urls) {          int count = urls.length;          long totalSize = 0;          for (int i = 0; i < count; i++) {              totalSize += Downloader.downloadFile(urls[i]);              publishProgress((int) ((i / (float) count) * 100));          }          return totalSize;      }       protected void onProgressUpdate(Integer... progress) {          setProgressPercent(progress[0]);      }       protected void onPostExecute(Long result) {          showDialog("Downloaded " + result + " bytes");      }  }

AsyncTask一定要在UI線程中執行個體化,調用execute一定要在UI線程,否則會報錯.

Handler如何與當前線程的Looper產生聯絡.
Handler在構造的時候,可以通過Looper.getLooper()擷取當前線程的Looper對象.

而在AsyncTask 中有一個靜態Handler對象,是用來後台線程和UI線程互動的,所以這個AsyncTask必須在UI 線程執行個體化.否則會報錯......

能否在其他線程中聲明Handler,並和主線程通訊Looper.getMainLooper(),測試一下.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.