UniversalImageLoader的使用

UniversalImageLoader

问题:从网络获取图片、显示、回收,每个环节都可能造成应用的OOM(如果没做相关的处理的话)。像ListView或者是GridView中,一页就含有大量的图片,快速滑动的时候,没有OOM也会有卡顿的现象。

解决办法:使用异步加载网络图片、缓存以及显示。

ImageLoader的工作原理:
这里写图片描述

  • 最后下载好图片,同时缓存到内存和本地中。
  • 当退出一个页面的时候,内存中ImageLoader的缓存将会全部清除,节省大量内存。
  • ImageLoader对图片的引用形式为软引用,当内不足的时候,将会被GC。
UniversalImageLoader的三大组件
  1. ImageLoadConfiguration:
    对图片缓存过程进行总体的配置,包括内存缓存大小、本地缓存大小以及缓存的位置,下载策略(FIFO,LIFO)
  2. DisplayImageOptions:
    控制图片显示的细节,比如指定下载中、下载失败、URL为空等默认图片,是否将图片缓存到内存或者硬盘中。
  3. ImageLoader:
    在显示图片的地方,比如RecyclerView的Adapter中,使用displayImage把Url对应的图片显示在ImageView上。
使用流程

github官方文档:https://github.com/nostra13/Android-Universal-Image-Loader/wiki/Quick-Setup

1、先在Gradle中配置属性

compile 'com.nostra13.universalimageloader:universal-image-loader :1.9.5'

2、在Manifest文件中配置相关

<manifest>
        <!-- 网络权限 -->
        <uses-permission android:name="android.permission.INTERNET" />
        <!-- 缓存图片到SD卡中所使用的权限 -->
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    ...
</manifest>

3、 在继承Application的类中或者是在Activity中初始化配置

public class YuZhenApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

        DisplayImageOptions displayImageOptions =
                new DisplayImageOptions.Builder()
                        // 当图片加载中的时候显示的图片,showStubImage()方法已废弃
                        .showImageOnLoading(R.mipmap.ic_launcher)
                        // 空url时显示的图片
                        .showImageForEmptyUri(R.mipmap.ic_launcher)
                        // 加载图片失败时显示的图片
                        .showImageOnFail(R.mipmap.ic_launcher)
                        // 解析Bitmap时使用的编码,默认为ARGB_8888
                        .bitmapConfig(Bitmap.Config.ARGB_8888)
                        // 缓存到内存中
                        .cacheInMemory(true)
                        // 缓存到本地
                        .cacheOnDisk(true)
                        // 设置在加载的前延迟的时间,默认没有延迟
                        .delayBeforeLoading(0)
                        .build();

        ImageLoaderConfiguration imageLoaderConfiguration =
                new ImageLoaderConfiguration.Builder(getApplicationContext())
                        // 设置线程的优先级
                        .threadPriority(Thread.NORM_PRIORITY - 2)
                        // 将图像解析成Bitmap时内存缓存保留的最大图片宽度和高度,默认为设备屏幕的宽高
                        .memoryCacheExtraOptions(480, 480)
                        // 默认的ImageLoader将会缓存多种尺寸的图片到内存中,调用这个方法禁止这个行为
                        .denyCacheImageMultipleSizesInMemory()
                        // 设置加载图片和设置图片的顺序(先进先出、先进后出)
                        .tasksProcessingOrder(QueueProcessingType.FIFO)
                        // 设置内存缓存的大小,默认是1/8APP当前可用的内存大小,可以设置为弱引用存储文件大小
                        // 注:设置完后,memoryCacheSize(int)方法将会被忽略
                        .memoryCache(new WeakMemoryCache())
                        // 设置文件名生成器,使用Md5算法生成(discCacheFileNameGenerator()方法已废弃)
                        .diskCacheFileNameGenerator(new Md5FileNameGenerator())
                        // 设置默认显示图片时的配置
                        .defaultDisplayImageOptions(displayImageOptions)
                        .build();

        ImageLoader.getInstance().init(imageLoaderConfiguration);
    }
}

* 注意:* 创建完Application后,要在Manifest指定application结点name属性;
这里写图片描述

4、使用displayImage加载图片

 ImageLoader.getInstance().displayImage(imageUrl,imageView);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值