Android组件化开发之ImageLoader封装

ImageLoader简介

Github:https://github.com/nostra13/Android-Universal-Image-Loader

特征

  • 多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中等
  • 支持随意的配置ImageLoader,例如线程池,图片下载器,内存缓存策略,硬盘缓存策略,图片显示选项以及其他的一些配置
  • 支持图片的内存缓存,文件系统缓存或者SD卡缓存
  • 支持图片下载过程的监听
  • 根据控件(ImageView)的大小对Bitmap进行裁剪,减少Bitmap占用过多的内存
  • 较好的控制图片的加载过程,例如暂停图片加载,重新开始加载图片,一般使用在ListView、GridView中,滑动过程中暂停加载图片,停止滑动的时候去加载图片
  • 提供在较慢的网络下对图片进行加载

ImageLoader封装

public class ImageLoaderManager {
    private static final int THREAD_COUNT = 4;
    private static final int PRIORITY = 2;
    private static final int MEMORY_CACHE_SIZE = 2 * 1024 * 1024;
    private static final int DISK_CACHE_SIZE = 50 * 1024 * 1024;
    private static final int CONNECTION_TIME_OUT = 5 * 1000;
    private static final int READ_TIME_OUT = 30 * 1000;

    private static ImageLoaderManager mInstance = null;
    private static ImageLoader mImageLoader = null;

    public static ImageLoaderManager getInstance(Context context) {
        if (mInstance == null) {
            synchronized (ImageLoaderManager.class) {
                if (mInstance == null) {
                    mInstance = new ImageLoaderManager(context);
                }
            }
        }
        return mInstance;
    }

    /**
     * 私有构造方法完成初始化工作
     *
     * @param context
     */
    private ImageLoaderManager(Context context) {
        ImageLoaderConfiguration config = new ImageLoaderConfiguration
            .Builder(context)
            .threadPoolSize(THREAD_COUNT)
            .threadPriority(Thread.NORM_PRIORITY - PRIORITY)
            .denyCacheImageMultipleSizesInMemory()
            //.memoryCache(new UsingFreqLimitedMemoryCache(MEMORY_CACHE_SIZE))
            .memoryCache(new WeakMemoryCache())
            .diskCacheSize(DISK_CACHE_SIZE)
            .diskCacheFileNameGenerator(new Md5FileNameGenerator())//将保存的时候的URI名称用MD5 加密
            .tasksProcessingOrder(QueueProcessingType.LIFO)
            .defaultDisplayImageOptions(getDefaultOptions())
            .imageDownloader(new BaseImageDownloader(context, CONNECTION_TIME_OUT, READ_TIME_OUT))
            .writeDebugLogs()
            .build();

        ImageLoader.getInstance().init(config);
        mImageLoader = ImageLoader.getInstance();
    }

    //load the image
    public void displayImage(ImageView imageView, String path, ImageLoadingListener listener) {
        if (mImageLoader != null) {
            mImageLoader.displayImage(path, imageView, listener);
        }
    }

    public void displayImage(ImageView imageView, String path) {
        displayImage(imageView, path, null);
    }

    /**
     * 默认的图片显示Options,可设置图片的缓存策略,编解码方式等,非常重要
     * @return
     */
    private DisplayImageOptions getDefaultOptions() {

        DisplayImageOptions options = new
            DisplayImageOptions.Builder()
            .showImageForEmptyUri(R.drawable.default_user_avatar)
            .showImageOnFail(R.drawable.default_user_avatar)
            .cacheInMemory(true)  //设置下载的图片是否缓存在内存中
            .cacheOnDisk(true)  //设置下载的图片是否缓存在SD卡中
            .considerExifParams(true)  //是否考虑JPEG图像EXIF参数(旋转,翻转)
            .imageScaleType(ImageScaleType.IN_SAMPLE_INT)  //设置图片以如何的编码方式显示
            .bitmapConfig(Bitmap.Config.RGB_565)  //设置图片的解码类型//
            .decodingOptions(new BitmapFactory.Options())  //设置图片的解码配置
            .resetViewBeforeLoading(true)  //设置图片在下载前是否重置
            .build();
        return options;
    }
}

版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/03/11/android-componentization-development-imageloader-packaging/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
Android组件化开发之ImageLoader封装
ImageLoader简介 Github:https://github.com/nostra13/Android-Universal-Image-Loader 特征 多线程下载图片,图片可以来源于网络,文件系统,项目文件夹as……
<<上一篇
下一篇>>
文章目录
关闭
目 录