Android--Universal-Image-Loader异步图片加载框架封装思路及实现

来源:互联网 发布:淘宝发货地址不一样 编辑:程序博客网 时间:2024/06/07 00:11

框架简介:

名称:nostra13/Android-Universal-Image-Loader

开源网址:https://github.com/nostra13/Android-Universal-Image-Loader

这里写图片描述


封装思路和目的:

这里写图片描述


代码实现:

import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.widget.ImageView;import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;import com.nostra13.universalimageloader.cache.memory.impl.WeakMemoryCache;import com.nostra13.universalimageloader.core.DisplayImageOptions;import com.nostra13.universalimageloader.core.ImageLoader;import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;import com.nostra13.universalimageloader.core.assist.ImageScaleType;import com.nostra13.universalimageloader.core.assist.QueueProcessingType;import com.nostra13.universalimageloader.core.download.BaseImageDownloader;import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;/** * @author: xiaoxu * @function: 初始化UniverImageLoader, 并用来加载网络图片 * @date: 17/7/20 */public class ImageLoaderUtil {    private static final int THREAD_COUNT = 3;//UIL允许最多有线程数    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;//UIL缓存图片最大空间    private static final int CONNECTION_TIME_OUT = 5 * 1000;//连接超时时间    private static final int READ_TIME_OUT = 30 * 1000;//读取超时时间    private static ImageLoaderUtil mInstance = null;    private static ImageLoader mImageLoader = null;    /**     * 私有构造方法完成初始化工作     *     * @param context     */    private ImageLoaderUtil(Context context) {       /*配置imageLoader的参数*/        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()//debug模式下输出日志                .build();        //初始化ImageLoaderConfiguration对象        ImageLoader.getInstance().init(config);        //获取ImageLloader实例        mImageLoader = ImageLoader.getInstance();    }    /**********************************     * 以单例模式创建ImageLoaderUtil对象,对外提供接口     * ************************************     */    public static ImageLoaderUtil getInstance(Context context) {        //第一次判空        if (mInstance == null) {            //第二次在同步块中判空(防止在其他线程中创建 )            synchronized (ImageLoaderUtil.class) {                if (mInstance == null) {                    mInstance = new ImageLoaderUtil(context);                }            }        }        return mInstance;    }    /**********************************     * 默认参数配置,提供必要的参数配置API     * 图片下载后的默认参数配置     * ************************************     */    private DisplayImageOptions getDefaultOptions() {        DisplayImageOptions options = new                DisplayImageOptions.Builder()                .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;    }    /**********************************     * 对外提供加载图片的API     ********************************/    public void displayImage(ImageView imageView, String path,                             DisplayImageOptions options, ImageLoadingListener listener) {        if (mImageLoader != null) {            mImageLoader.displayImage(path, imageView, options, listener);        }    }    public void displayImage(ImageView imageView, String path, ImageLoadingListener listener) {        if (mImageLoader != null) {            mImageLoader.displayImage(path, imageView, null, listener);        }    }    public void displayImage(ImageView imageView, String path) {        displayImage(imageView, path, null);    }}
阅读全文
0 0
原创粉丝点击