zoukankan      html  css  js  c++  java
  • 后台执行Bitmap加载

    如果加载图片时,使用的图片数据源不是来自于内存,而是来自硬盘或网络时,一般不会再UI线程执行图片加载操作。

    图片的加载速度取决于很多方面(往往具有不可预测性),比如:硬盘或者网络的读写速度、图片大小、CPU执行速度等待...

    如果在UI线程执行图片加载操作,很可能会导致ANR。

    因此,可以在后台执行图片加载操作。

    方法一:使用AsyncTask执行后台图片加载

        public class BitmapWorkerTask extends AsyncTask<Integer, Void, Bitmap> {
            private final WeakReference<ImageView> imageViewReference;
            private int data = 0;
            public BitmapWorkerTask(ImageView imageView) {
                // Use a WeakReference to ensure the ImageView can be garbage
                // collected
                imageViewReference = new WeakReference<ImageView>(imageView);
            }
            @Override
            protected Bitmap doInBackground(Integer... params) {
                // 图片资源ID
                data = params[0];
                // 局限性在于:调用了getResources()
                return UtilTools.decodeSampleBitmatFromResource(getResources(),
                        data, 100, 100);
            }
            @Override
            protected void onPostExecute(Bitmap result) {
                if (imageViewReference != null && result != null) {
                    final ImageView imageView = imageViewReference.get();
                    if (imageView != null) {
                        imageView.setImageBitmap(result);
                    }
                }
            }
        }

    其中,doInBackground()在子线程(background Thread)中执行,onPostExecute()则是在UI线程执行。

        /**
         * <功能描述> 执行加载Bitmap
         * 
         * @param resId 资源ID
         * @param imageView [参数说明] 控件
         * @return void [返回类型说明]
         */
        private void loadBitmap(int resId, ImageView imageView) {
            BitmapWorkerTask task = new BitmapWorkerTask(imageView);
            task.execute(resId);
        }

    执行 task.execute(resId) 时,其参数实际上是Params。

    上述即实现了,状态后台线程中加载Bitmap,并在加载完成后显示到UI上的功能。

  • 相关阅读:
    图基础模板
    POJ 2528 Mayor's posters(线段树+离散化)
    POJ 3468 A Simple Problem with Integers(线段树)
    poj 2251 Dungeon Master
    nyoj 540 奇怪的排序
    hdoj 1253 胜利大逃亡
    hdoj 2612 Find a way【bfs+队列】
    nyoj 915 +-字符串
    hdoj 1242 Rescue
    nyoj 1022 最少步数【优先队列+广搜】
  • 原文地址:https://www.cnblogs.com/CVstyle/p/6388095.html
Copyright © 2011-2022 走看看