圖片非同步載入和圖片緩衝的兩種方式

來源:互聯網
上載者:User

,首先定義個工具類:

 
 /* * 非同步任務 ,接受的參數是 要下載圖片的url * 傳回值 是這個圖片 的bitMap */public class LoadImageAsyncTask extendsAsyncTask<String, Void, Bitmap> {     // 定義一個介面 ,介面裡麵包含了幾個需要實現的方法    // 誰調用 LoadImageAsyncTask 就必須實現這個介面裡面定義的方法     privateLoadImageCallback loadImageCallback;              //因為LoadImageAsyncTask 沒有預設的空參數的構造方法     publicLoadImageAsyncTask(LoadImageCallback loadImageCallback) {        this.loadImageCallback = loadImageCallback;    }     publicinterface LoadImageCallback{        //當圖片被載入上來需要執行的方法        voidonImageLoaded(Bitmap bitmap);        // 在圖片下載之前需要執行的方法        voidbeforeImageLoaded();    }         <span data-mce-="">// 在後台運行 非ui線程 </span>    // 可變長度的參數  其實就是 parms的數組    @Override    protectedBitmap doInBackground(String... params) {        try{            //擷取可變長度參數的第一個參數的string 代表的是 圖片的地址            String iconpath = params[0];            URL url =new URL(iconpath);            URLConnection conn = url.openConnection();            Bitmap bitmap = BitmapFactory.decodeStream(conn.getInputStream());            returnbitmap;        }catch (Exception e) {            e.printStackTrace();            returnnull;        }    }    // 背景工作執行前的操作    <span data-mce-="">//運行在ui線程中的</span>    @Override    protectedvoid onPreExecute() {        loadImageCallback.beforeImageLoaded();        super.onPreExecute();    }     // 背景工作執行完畢後的操作    <span data-mce-="">// 運行在ui線程中</span>    @Override    protectedvoid onPostExecute(Bitmap result) {        super.onPostExecute(result);        // 需要把bitmap 設定到某個控制項上         loadImageCallback.onImageLoaded(result);    }}?AsyncTask<Params, Progress, Result>泛型裡面的參數是可以改變的,如這個工具類第一個參數就是圖片的路徑,第二個參數就是執行的進度,第三個參數是返回是BitMap?if (map.containsKey(iconname)) {                // 如果map集合中存在軟引用的對象                SoftReference<Bitmap> obj = map.get(iconname);                Bitmap bitmap = obj.get();                iv_book.setImageBitmap(bitmap);                Log.i("MyReadActivity","使用記憶體緩衝");            }else {                LoadImageAsyncTask task =new LoadImageAsyncTask(                        newLoadImageCallback() {                            publicvoid onImageLoaded(Bitmap bitmap) {                                iv_book.setImageBitmap(bitmap);                                // <span data-mce-="">儲存到sd卡上</span>  緩衝方式1                                /*                                 * try { File file = new File(Environment                                 * .getExternalStorageDirectory(), "/image" +                                 * iconname); FileOutputStream fos = new                                 * FileOutputStream( file); // 把記憶體中的圖片儲存到了sd卡中                                 * bitmap.compress(CompressFormat.JPEG, 100,                                 * fos); } catch (Exception e) {                                 * e.printStackTrace(); }                                 */                                // <span data-mce-="">把圖片儲存到記憶體中</span>  緩衝方式2                                map.put(iconname,new <span data-mce-="">SoftReference</span><Bitmap>(                                        bitmap));                                Log.i("MyReadActivity","把圖片存放到記憶體緩衝中 ");                            }                             publicvoid beforeImageLoaded() {                                iv_book.setImageResource(R.drawable.book);                                Log.i("MyReadActivity","下載伺服器圖片 ");                            }                        });                // 非同步從伺服器上下載圖片                task.execute(path);            }

聯繫我們

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