android進程與線程詳解三:AsyncTask

來源:互聯網
上載者:User

AsyncTask使你可以在你的介面上執行非同步工作。它在一個背景工作執行緒中執行耗時操作然後把結果傳給介面線程,不需要你親自去管理線程和控制代碼。


要使用它,你必須從AsyncTask派生一個類並實現回調方法doInBackground(),此方法在一個背景線程池中運行。要更新你的介面,你應實現onPostExecute(),它把doInBackground()的結果弄過來並在介面線程中運行,於是你可以安全地更新你的介面。你可以在介面線程中調用execute()來執行AsyncTask任務。


例如,你可以把上一章中的例子用AsyncTask實現:

public void onClick(View v) {<br /> new DownloadImageTask().execute("http://example.com/image.png");<br />}<br /><pre name="code" class="java">private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { /** 系統把給予AsyncTask.execute() 的參數傳給這個方法並且在後台線程中調用這個方法完成工作*/ protected Bitmap doInBackground(String... urls) { return loadImageFromNetwork(urls[0]); } /** 系統把doInBackground()的執行結果傳送過來並且在介面線程中調用這個方法執行任務 */ protected void onPostExecute(Bitmap result) { mImageView.setImageBitmap(result); }}</pre><p>


現在介面變得安全並且代碼變得簡單了。因為把工作分成了在背景工作執行緒中完成的部分和在介面線程中完成的部分。

你應該閱讀AsyncTask的參考來完全理解如何使用這個類。這裡是一個對它如何工作的概覽:

  • 你可以使用範型指定參數的類型,進度值,和任務的最終值。

  • 方法doInBackground()自動在背景工作執行緒中執行

  • onPreExecute(),onPostExecute(),
    和onProgressUpdate()都在介面線程中執行

  • doInBackground()返回的值被傳遞到onPostExecute()

  • 你可以在任何時刻在doInBackground()中調用publishProgress()引起在介面線程中執行onProgressUpdate()

  • 你可以在任意時刻在任何線程中取消任務

警告:另一個你在使用背景工作執行緒時可能遇到的問題是activity的意外重啟(比如螢幕的方向變了),這可能銷毀你的背景工作執行緒。要瞭解如何才能在此類現象發生時避免你的任務被殺以及如何在activity死亡時正確的取消你的任務,請參閱Shelves例子的源碼。

相關文章

聯繫我們

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