我们在加载大量的网络图片的时候,采用的方式不妥当的时候,经常会出现内存溢出的现象,导致程序崩溃,还有加载图片速度慢等一些问题。ImageLoader图片加载核心类,内部使用线程池加载图片,灵活更改ImageLoader的基本配置,包括最大线程数、缓存方式、图片显示选项等;图片异步加载缓存机制,包括内存缓存(软引用)及本地缓存;对加载过程实现监听和事件处理;能够配置加载图片的显示选项,包括图片圆角处理和加载完成显示动画等好处可以基本上解决以上问题!
@Override
public void onCreate() {
super.onCreate();
//没有緩存的配置:
ImageLoaderConfiguration config=new ImageLoaderConfiguration.Builder(getApplicationContext())
.threadPriority(Thread.NORM_PRIORITY - 2)
.denyCacheImageMultipleSizesInMemory()
.discCacheFileNameGenerator(new Md5FileNameGenerator())
.tasksProcessingOrder(QueueProcessingType.LIFO)
.enableLogging() // Not necessary in common
.build();
//有緩存的配置:
DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
.cacheInMemory()
.cacheOnDisc()
.build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
.defaultDisplayImageOptions(defaultOptions)
.threadPriority(Thread.NORM_PRIORITY - 2)
.denyCacheImageMultipleSizesInMemory()
.discCacheFileNameGenerator(new Md5FileNameGenerator())
.tasksProcessingOrder(QueueProcessingType.LIFO)
.enableLogging()
.build();
ImageLoader.getInstance().init(config);
}
}
配置完成后,我们就可以在任何想用它的地方使用了。具体使用如下:
1. ImageLoader.getInstance().displayImage(url, ImageView);
2. DisplayImageOptions options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.ic_stub) //加载开始默认的图片
.showImageForEmptyUri(R.drawable.ic_empty) //url爲空會显示drawable里面的图片
.showImageOnFail(R.drawable.ic_error) //加载图片出现问题,会显示此图片
.cacheInMemory() //缓存用
.cacheOnDisc() //缓存用
.imageScaleType(ImageScaleType.IN_SAMPLE_INT)
.bitmapConfig(Bitmap.Config.RGB_565) // 防止内存溢出的,图片太多用这个
.displayer(new RoundedBitmapDisplayer(5)) //图片圆角显示,值为整数
.build();
ImageLoader.getInstance().displayImage(url, imageView,options);
3.ImageLoader.getInstance().loadImage(url,new SimpleImageLoadingListener(){
public void onLoadingComplete(String imageUri, android.view.View view, android.graphics.Bitmap loadedImage) {
imageView.setImageBitmap(loadedImage); //imageview控件对象
};
public void onLoadingFailed(String imageUri, android.view.View view, com.nostra13.universalimageloader.core.assist.FailReason failReason) {
Toast.makeText(ShowOneImage.this,"加载失败", Toast.LENGTH_LONG).show();
};
@Override
public void onLoadingStarted(String imageUri, View view) {
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
}
});
参考文档: http://my.oschina.net/u/1858156/blog/338854