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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Android异步下载网络图片(其二:AsyncTask)

發布時間:2025/6/15 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android异步下载网络图片(其二:AsyncTask) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在上一節中,我們使用Handler、Thread/Runnable 、URL、HttpURLConnection等等來進行異步下載網絡圖片。

但是采用這種方式有一些缺點,如下:

  • 線程的開銷較大,如果每個任務都要創建一個線程,那么程序的效率要低很多。
  • 線程無法管理,匿名線程創建并啟動后就不受程序的控制了,如果有很多個請求發送,那么就會啟動非常多的線程,系統將不堪重負。
  • 另外,前面已經看到,在新線程中更新UI還必須要引入handler,這讓代碼看上去非常臃腫。

    ?那么有沒有比較更好好的實現方式呢?這個可以有!它就是AsyncTask

    ?AsyncTask的特點是任務在主UI線程之外運行,而回調方法是在主UI線程中,這就有效地避免了使用Handler帶來的麻煩。?

    AsyncTask定義了三種泛型類型 Params,Progress和Result。
    • Params 啟動任務執行的輸入參數。
    • Progress 后臺任務執行的百分比。
    • Result 后臺執行任務返回的結果。

    ? 當然,使用它還必須覆蓋它的一些抽象方法方法

    ?doInBackground(Params...)????????執行任務

    ?onPostExecute(Result)???????????? 返回任務執行的結果,通常更新UI

    ?onProgressUpdate (Progress... values)?進度更新

    ?注意:紅色的是必須實現的。

    ?第一步:設計好UI,與上節一樣

    ?第二步:也與上節一樣。

    ?第三步:主要是實例化AsyncTask,并執行execute(Params)

    ?我們必須繼承AsyncTask,并覆蓋它的一些方法,我們這里主要是要獲取網絡圖片,并保存為Bitmap,以便UI根據Bitmap來更新的。

    ?那么需要為AsyncTask設置返回的類型參數為String,Integer,Bitmap 類定義如下:

    View Code public class MyASyncTask extends AsyncTask<String, Integer, Bitmap> {

    ?在doInBackground(Params...)??方法中?,接受String ....params,返回我們需要的Bitmap.當然我們這里是獲取圖片Bitmap所以要返回Bitmap

    ??如果你返回的需要是String或者其他復雜類型時候,需要修改類的定義參數類型為你需要返回的類型,當然接受參數也是根據你的請求需要改變。

    View Code @Overrideprotected Bitmap doInBackground(String... params) {Bitmap bitmap=null;try {URL url = new URL(params[0]);HttpURLConnection con=(HttpURLConnection) url.openConnection();con.setDoInput(true);con.connect();InputStream inputStream=con.getInputStream();bitmap=BitmapFactory.decodeStream(inputStream); inputStream.close();} catch (MalformedURLException e) {e.printStackTrace();}catch (IOException e) {// TODO Auto-generated catch block e.printStackTrace();} return bitmap;}

    在?onPostExecute(Result)?中是請求獲得結果后更新UI部分。你會看到他的參數就是我們類中的類型參數。代碼如下:

    View Code //執行獲得圖片數據后,更新UI:顯示圖片,隱藏進度條 @Overrideprotected void onPostExecute(Bitmap Result){ImageView imgView=(ImageView)this.viewGroup.getChildAt(0);imgView.setImageBitmap(Result);ProgressBar bar=(ProgressBar)this.viewGroup.getChildAt(1);bar.setVisibility(View.GONE);}

    然后怎么用呢?在UI線程中執行吧:

    MyASyncTask yncTask=new MyASyncTask(this,frameLayout);
    ???yncTask.execute(params);

    運行結果與上節大同小異

    

總結

以上是生活随笔為你收集整理的Android异步下载网络图片(其二:AsyncTask)的全部內容,希望文章能夠幫你解決所遇到的問題。

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