使用 Android-Universal-Image-Loader 图片加载框架,加载图片

Android-Universal-Image-Loader 已经好久没有更新维护动态了
git 地址:https://github.com/nostra13/Android-Universal-Image-Loader

特点

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

使用步骤

第一步,添加依赖

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

第二步,添加权限

<manifest>
    <!-- Include following permission if you load images from Internet -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- Include following permission if you want to cache images on SD card -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    ...
</manifest>

第三步,初始化并配置 Universal-Image-Loader

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        //创建默认的ImageLoader配置参数
        //不要将这段代码拷贝进你的工程。这是所有配置选项使用的范例,根据需求选择性的配置即可。
        //查看sample工程来学习如何正确的使用ImageLoader

        //这里的路径可以自定义
        File cacheDir = StorageUtils.getCacheDirectory(this);

        ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)
                // 默认等于你的屏幕尺寸,设备屏幕宽高
                .memoryCacheExtraOptions(480, 800)
                // 在将下载的图片保存到你的sd卡之前会重新计算,压缩。
                // 这个属性不要滥用,只有你在对应的需求时再用,因为他会使你的ImageLoader变的很慢。
                .diskCacheExtraOptions(480, 800, null)
                //用于执行从源获取图片任务的 Executor,为configuration中的 taskExecutor,
                // 如果为null,则会调用DefaultConfigurationFactory.createExecutor(…)根据配置返回一个默认的线程池。
                .taskExecutor(null)
                //用于执行从缓存获取图片任务的 Executor,为configuration中的 taskExecutorForCachedImages,
                // 如果为null,则会调用DefaultConfigurationFactory.createExecutor(…)根据配置返回一个默认的线程池。
                .taskExecutorForCachedImages(null)
                // 表示核心池大小(最大并发数) 默认为3
                .threadPoolSize(3)
                // 线程优先级,默认Thread.NORM_PRIORITY - 2
                .threadPriority(Thread.NORM_PRIORITY - 2)
                // 任务进程的顺序,默认为:FIFO 先进先出
                .tasksProcessingOrder(QueueProcessingType.FIFO)
                //设置内存缓存不允许缓存一张图片的多个尺寸,默认允许。
                .denyCacheImageMultipleSizesInMemory()
                //图片内存缓存
                .memoryCache(new LruMemoryCache(2 * 1024 * 1024))
                //memoryCacheSize 为 0,则设置该内存缓存的最大字节数为 App 最大可用内存的 1/8。
                .memoryCacheSize(2 * 1024 * 1024)
                // 创建最大的内存缓存百分比,默认为 13%
                .memoryCacheSizePercentage(13)
                // 硬盘缓存路径,默认为StorageUtils.getCacheDirectory(context)
                .diskCache(new UnlimitedDiskCache(cacheDir))
                //硬盘缓存大小
                .diskCacheSize(50 * 1024 * 1024)
                //缓存文件数量
                .diskCacheFileCount(100)
                // 硬盘缓存文件名生成器,默认为哈希文件名生成器
                .diskCacheFileNameGenerator(new HashCodeFileNameGenerator())
                // 创建图片下载器,默认是BaseImageDownloader
                .imageDownloader(new BaseImageDownloader(this))
                // 图片解码器,负责将图片输入流InputStream转换为Bitmap对象
                .imageDecoder(new BaseImageDecoder(true))
                // 图片显示的配置项。比如加载前、加载中、加载失败应该显示的占位图片,图片是否需要在磁盘缓存,是否需要在内存缓存等
                .defaultDisplayImageOptions(DisplayImageOptions.createSimple())
                //是否显示调试log信息
                .writeDebugLogs()
                .build();

        //Initialize ImageLoader with configuration.
        ImageLoader.getInstance().init(configuration);
    }
}

推荐初始化配置

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        //这里的路径可以自定义
        File cacheDir = new File(Environment.getExternalStorageDirectory()+"/target");

        ImageLoaderConfiguration.Builder configuration = new ImageLoaderConfiguration.Builder(this);
        configuration.threadPriority(Thread.NORM_PRIORITY - 2);
        configuration.denyCacheImageMultipleSizesInMemory();
        configuration.diskCacheFileNameGenerator(new Md5FileNameGenerator());
        configuration.diskCacheSize(50 * 1024 * 1024); // 50M 大小
        configuration.tasksProcessingOrder(QueueProcessingType.LIFO);
        configuration.diskCache(new UnlimitedDiskCache(cacheDir));

        //在发布release包时,需要屏蔽UIL中的log信息,下面这行代码可以做到
        if (BuildConfig.DEBUG){
            // 发布release包时,移除log信息
            configuration.writeDebugLogs(); 
        }

        //Initialize ImageLoader with configuration.
        ImageLoader.getInstance().init(configuration.build());
    }
}

猜你喜欢

转载自blog.csdn.net/qq_34801506/article/details/79040537