日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android进程与线程详解三:AsyncTask

發布時間:2024/9/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android进程与线程详解三:AsyncTask 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

AsyncTask使你可以在你的界面上執行異步工作。它在一個工作線程中執行耗時操作然后把結果傳給界面線程,不需要你親自去管理線程和句柄。


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


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

public void onClick(View v) { new DownloadImageTask().execute("http://example.com/image.png"); }

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);} }

現在界面變得安全并且代碼變得簡單了。因為把工作分成了在工作線程中完成的部分和在界面線程中完成的部分。

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

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

  • 方法doInBackground()自動在工作線程中執行

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

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

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

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

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






與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的android进程与线程详解三:AsyncTask的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。