zoukankan      html  css  js  c++  java
  • 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,加载网络图片不够快等。

  • 相关阅读:
    SQL Server数据库高级进阶之事务实战演练
    ASP.NET Core使用Nginx搭建高可用分布式Web集群
    C#签名算法HS256和RS256实战演练
    ASP.NET (Core)WebApi参数传递实操演练
    基于Windows服务实现的亚马逊云S3文件上传
    ASP.NET Core WebApi如何动态生成树形Json格式数据
    SQL Server数据库高级进阶之分布式唯一ID生成实战演练
    ASP.NET Core WebApi分布式文件系统FastDFS实战演练
    .Net Core使用NLog记录日志到文件和数据库实战演练
    ASP.NET Core开源任务调度框架Hangfire实战演练
  • 原文地址:https://www.cnblogs.com/chq3272991/p/5752070.html
Copyright © 2011-2022 走看看