Universal-ImageLoader:
在Android图片处理中需要考虑的问题很多,例如OOM、图片缓存和网络图片加载、多线程问题及图片压缩处理等复杂的问题,ImageLoader和Picasso为我们解决了这些问题。
优点:
- 支持本地图片和网络图片的多线程异步加载和缓存处理;
- 个性化的配置自己项目的ImageLoader;
- 图片加载过程的监听回调;
- 自动对加载的图片针对当前剩余内存进行裁剪优化,防止OOM;
- 较好的控制图片的加载过程,例如暂停图片加载,重新开始加载图片;
缺点:
- 没有对本地文件压缩处理的相关API方法以及默认都是Src模式设置图片,没有针对Background属性开放API。
开源库universal-image-loader-1.9.3.jar,简单使用代码如下:
1 package com.zhang.imageloaderdemo; 2 3 import android.app.Application; 4 import android.graphics.Bitmap; 5 import android.os.Environment; 6 7 import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache; 8 import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator; 9 import com.nostra13.universalimageloader.cache.memory.impl.UsingFreqLimitedMemoryCache; 10 import com.nostra13.universalimageloader.core.DisplayImageOptions; 11 import com.nostra13.universalimageloader.core.ImageLoader; 12 import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; 13 import com.nostra13.universalimageloader.core.assist.ImageScaleType; 14 import com.nostra13.universalimageloader.core.assist.QueueProcessingType; 15 import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer; 16 import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer; 17 import com.nostra13.universalimageloader.core.download.BaseImageDownloader; 18 import com.nostra13.universalimageloader.core.download.ImageDownloader; 19 20 import java.io.File; 21 import java.io.IOException; 22 import java.io.InputStream; 23 24 /** 25 * Created by Mr.Z on 2016/9/25 0025. 26 */ 27 public class MyApplication extends Application { 28 29 @Override 30 public void onCreate() { 31 super.onCreate(); 32 33 ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this) 34 .memoryCacheExtraOptions(480, 800)//max width, max height,即保存的每个缓存文件的最大长宽 35 .discCacheExtraOptions(480, 800, null)//设置缓存的详细信息,最好不要设置这个 36 .threadPoolSize(3)//线程池内加载的数量 37 .threadPriority(Thread.NORM_PRIORITY - 2) 38 .denyCacheImageMultipleSizesInMemory() 39 .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024))//你可以通过自己的内存缓存实现 40 .memoryCacheSize(2 * 1024 * 1024) 41 .diskCacheSize(50 * 1024 * 1024) 42 .discCacheFileNameGenerator(new Md5FileNameGenerator())//将保存的时候的URI名称用MD5 加密 43 .tasksProcessingOrder(QueueProcessingType.FIFO) 44 .discCacheFileCount(100)//缓存的文件数量 45 .discCache(new UnlimitedDiscCache(new File(Environment.getExternalStorageDirectory() + "/imageLoader/imgCache")))