Loading

universal image loader自己使用的一些感受

1、全局入口的Application定义初始化:

ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(getApplicationContext())
        .threadPoolSize(3) //线程池内加载的数量
        .threadPriority(Thread.NORM_PRIORITY - 1) // default  
        .denyCacheImageMultipleSizesInMemory()
                //.memoryCache(new WeakMemoryCache())   //也可以用自己的内存缓存实
        .memoryCache(new LruMemoryCache(50 * 1024 * 1024))   //也可以用自己的内存缓存实现
        .memoryCacheSize(50*1024*1024)
        .diskCacheFileNameGenerator(new Md5FileNameGenerator()) //将保存的时候的URL名称用MD5加密
        .tasksProcessingOrder(QueueProcessingType.FIFO) //先进先出
        .diskCacheSize(200 * 1024 * 1024)
        .defaultDisplayImageOptions(DisplayImageOptions.createSimple())    
        .imageDownloader(new BaseImageDownloader(getApplicationContext()))  // default
        .imageDecoder(new BaseImageDecoder(true)) // default
        //.writeDebugLogs() // Remove for release app
        .build();
        //全局初始化此配置  
        ImageLoader.getInstance().init(configuration);

2、显示设置:

/**
     *用于显示图片的选项,没过渡时间
     * 用于圈子社区,解决列表图片过多时,出现刷新闪烁的情况
     */
    public static DisplayImageOptions OptionsWithCache  = new DisplayImageOptions.Builder()
            .showImageOnLoading(R.drawable.icon_no_photo)
            .showImageOnFail(R.drawable.icon_no_photo)
            .showImageForEmptyUri(R.drawable.icon_no_photo)//设置图片Uri为空或是错误的时候显示的图片
            .cacheInMemory(true)
            .cacheOnDisk(true)
            .bitmapConfig(Bitmap.Config.RGB_565)
            .considerExifParams(true)
            //EXACTLY_STRETCHED:图片会缩放到目标大小完全相同   EXACTLY :图像将完全按比例缩小的目标大小
            //IN_SAMPLE_INT:图像将被二次采样的整数倍
            .imageScaleType(ImageScaleType.IN_SAMPLE_INT)
            .resetViewBeforeLoading(false)
            //    .delayBeforeLoading(50)  //载入图片前稍做延时可以提高整体滑动的流畅度
            .displayer(new FadeInBitmapDisplayer(200))  //是否图片加载好后渐入的动画时间
            .build();

3、如果ImageView设置了长宽大小:

建议用display,可以根据ImageView的大小来自动缩放图片,节省内存:

 ImageLoader.getInstance().displayImage(pic_url, imageView,OptionsWithCache); 

对于listView里面,图片可能因为滑动过快,导致错误重复,可以通过设置tag来处理:

public static void setImageWithTag(final String pic_url,final ImageView imageView,Context context) {
        if(pic_url != null) {
            String tag = (String) imageView.getTag();
            if(tag == null) {
                tag = "";
            }
            if(pic_url.equals(imageView.getTag())) {
                return;
            }
        }
        String picUrl = pic_url;
        if(!picUrl.contains("http://")) {
            picUrl = MyConfig.picFirst+picUrl;
        }
        //Log.i("main","loading pic:"+pic_url);
        ImageLoader.getInstance().displayImage(picUrl, imageView, OptionsWithCache);
    }

listView里面的设置:

 SetImageUtils.setImageWithTag(picUrl,holder.iv,context);

holder.iv.setTag(picUrl);

4、一些图片加载过程中的监听:

//加载自定义配置的一个图片的,网络加载监听,等待加载图片完成再初始化缩小放大
        ImageLoader.getInstance().displayImage(picurl,mImageView, SetImageUtils.OptionsWithCache, new SimpleImageLoadingListener() {
            @Override
            public void onLoadingStarted(String imageUri, View view) {
                super.onLoadingStarted(imageUri, view);
                Utility.setLoadingProgressbar(null,parentView,true);
            }

            @Override
            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                super.onLoadingComplete(imageUri, view, loadedImage);
                Utility.setLoadingProgressbar(null,parentView,false);
            }
        }, new ImageLoadingProgressListener() {
            @Override
            public void onProgressUpdate(String s, View view, int i, int i1) {
                //Log.i("main","i="+i+",il="+i1);
            }
        });

主要有ImageLoadingListener(或者其子类),和ImageLoadingProgressListener两种。

对于universal image loader 结合了内存、本地存储二级机制,一定程度上方便了使用,但也有一些问题,有一定几率会OOM,加载网络图片不够快等。

posted @ 2016-08-09 10:27  集君  阅读(1317)  评论(0编辑  收藏  举报