• 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,加载网络图片不够快等。

  • 相关阅读:
    java第五周作业
    ajax初探--实现简单实时验证
    Html+CSS二周目--->常用概念
    Html+CSS--->第一周初探
    Servlet细节整合
    多线程基础
    设计模式之单例模式(Singleton)
    配置文件Java读写
    Java基础之IO流
    JDBC基础
  • 原文地址:https://www.cnblogs.com/chq3272991/p/5752070.html
Copyright © 2020-2023  润新知