//使用方法
ImageLoader.getInstance().displayImage(advert.getImgUrl(), imageView, mOptions,
new SimpleImageLoadingListener() {
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
super.onLoadingFailed(imageUri, view, failReason);
// 加载失败时的处理
Log.i("tag", "imageUri=" + imageUri);
}
});
//application初始化相关设置参数,oncreate()调用
// 初始化ImageLoader
private void initImageLoaderConfig() {
String cacheDir = Environment.getExternalStorageDirectory().getAbsolutePath() + "/ybs/imageloader";
File cacheFile = new File(cacheDir);
if (!cacheFile.exists())
cacheFile.mkdir();
ImageLoaderConfiguration.Builder config = new ImageLoaderConfiguration.Builder(getApplicationContext());
config.threadPriority(Thread.MIN_PRIORITY + 2);
config.denyCacheImageMultipleSizesInMemory();
config.diskCache(new UnlimitedDiscCache(cacheFile));
config.diskCacheFileNameGenerator(new Md5FileNameGenerator());
config.diskCacheSize(50 * 1024 * 1024); // 50 MiB
config.tasksProcessingOrder(QueueProcessingType.LIFO);
config.threadPoolSize(3);
config.writeDebugLogs();
config.memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024)).memoryCacheSize(2 * 1024 * 1024);
com.nostra13.universalimageloader.utils.L.disableLogging();
// Initialize ImageLoader with configuration.
// config.imageDownloader(new
// BaseImageDownloader(getApplicationContext(), 300, readTimeout))
ImageLoader.getInstance().init(config.build());
}
//***以下代码来自 来源:梦痕的专栏 www.2cto.com/kf/201412/361295.html**********************************************************************************************************
//参数配置相关说明
DisplayImageOptions options =
new
DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.ic_stub)
// 设置图片下载期间显示的图片
.showImageForEmptyUri(R.drawable.ic_empty)
// 设置图片Uri为空或是错误的时候显示的图片
.showImageOnFail(R.drawable.ic_error)
// 设置图片加载或解码过程中发生错误显示的图片
.resetViewBeforeLoading(
false
)
// default 设置图片在加载前是否重置、复位
.delayBeforeLoading(
1000
)
// 下载前的延迟时间
.cacheInMemory(
false
)
// default 设置下载的图片是否缓存在内存中
.cacheOnDisk(
false
)
// default 设置下载的图片是否缓存在SD卡中
.preProcessor(...)
.postProcessor(...)
.extraForDownloader(...)
.considerExifParams(
false
)
// default
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
// default 设置图片以如何的编码方式显示
.bitmapConfig(Bitmap.Config.ARGB_8888)
// default 设置图片的解码类型
.decodingOptions(...)
// 图片的解码设置
.displayer(
new
SimpleBitmapDisplayer())
// default 还可以设置圆角图片new RoundedBitmapDisplayer(20)
.handler(
new
Handler())
// default
.build();
//注:如果DisplayImageOption没有传递给ImageLoader.displayImage(…)方法,那么从配置默////认显示选项
//(ImageLoaderConfiguration.defaultDisplayImageOptions(…))将被使用。
1
).imageScaleType(ImageScaleType imageScaleType)
//设置图片的缩放方式
缩放类型mageScaleType:
EXACTLY :图像将完全按比例缩小的目标大小
EXACTLY_STRETCHED:图片会缩放到目标大小完全
IN_SAMPLE_INT:图像将被二次采样的整数倍
IN_SAMPLE_POWER_OF_2:图片将降低
2
倍,直到下一减少步骤,使图像更小的目标大小
NONE:图片不会调整
2
).displayer(BitmapDisplayer displayer)
//设置图片的显示方式
显示方式displayer:
RoundedBitmapDisplayer(
int
roundPixels)设置圆角图片
FakeBitmapDisplayer()这个类什么都没做
FadeInBitmapDisplayer(
int
durationMillis)设置图片渐显的时间
SimpleBitmapDisplayer()正常显示一张图片
.considerExifParams(
true
)
//是否考虑JPEG图像EXIF参数(旋转,翻转)
.displayer(
new
FadeInBitmapDisplayer(
100
))
// 图片加载好后渐入的动画时间
//相关构造方法
imageUrl 图片的URL地址
imageView 显示图片的ImageView控件
options DisplayImageOptions配置信息
listener 图片下载情况的监听
progressListener 图片下载进度的监听
ImageLoader.getInstance().displayImage(uri, imageView);
2
、 ImageLoader.getInstance().displayImage(uri, imageView, options);
3
、 ImageLoader.getInstance().displayImage(uri, imageView, listener);
4
、 ImageLoader.getInstance().displayImage(uri, imageView, options, listener);
5
、 ImageLoader.getInstance().displayImage(uri, imageView, options, listener, progressListener);
|
注意事项
1、如果你经常出现oom,你可以尝试:
1)禁用在内存中缓存cacheInMemory(false),如果oom仍然发生那么似乎你的应用程序有内存泄漏,使用MemoryAnalyzer来检测它。否则尝试以下步骤(尝试所有或几个)
2)减少配置的线程池的大小(.threadPoolSize(...)
),建议1~5
3)在显示选项中使用 .bitmapConfig(Bitmap.Config.RGB_565) . RGB_565模式消耗的内存比ARGB_8888模式少两倍.
4)配置中使用.diskCacheExtraOptions(480, 320, null)
5)配置中使用 .memoryCache(newWeakMemoryCache()) 或者完全禁用在内存中缓存(don't call .cacheInMemory()).
6)在显示选项中使用.imageScaleType(ImageScaleType.EXACTLY) 或 .imageScaleType(ImageScaleType.IN_SAMPLE_INT)
7)避免使用 RoundedBitmapDisplayer. 调用的时候它使用ARGB-8888模式创建了一个新的Bitmap对象来显示,对于内存缓存模式 (ImageLoaderConfiguration.memoryCache(...)) 你可以使用已经实现好的方法.
2、ImageLoader是根据ImageView的height,width确定图片的宽高
3、一定要对ImageLoaderConfiguration进行初始化,否则会报错
4、开启缓存后默认会缓存到外置SD卡如下地址(/sdcard/Android/data/[package_name]/cache).如果外置SD卡不存在,会缓存到手机. 缓存到Sd卡需要在AndroidManifest.xml文件中进行如下配置
<uses-permission android:name=
"android.permission.WRITE_EXTERNAL_STORAGE"
></uses-permission>
内存缓存模式可以使用以下已实现的方法 (ImageLoaderConfiguration.memoryCache(...))
1)缓存只使用强引用
LruMemoryCache (缓存大小超过指定值时,删除最近最少使用的bitmap) --默认情况下使用
2)缓存使用弱引用和强引用
?
1 2 3 4 5 |
|
3)缓存使用弱引用
WeakMemoryCache(没有限制缓存)
6、本地缓存模式可以使用以下已实现的方法 (ImageLoaderConfiguration.diskCache(...))
?
1 2 3 4 |
|