ImageLoader可以实现:
1)可以实现多线程下载图片,图片可以来源于网络,文件和assets,drawable本地等。
2)可以随意的配置ImageLoader。例如线程池,图片下载器,内存缓存策略,硬盘缓存策略,图片显示以及其它一些配置。
3)缓存方面:支持图片的内存缓存,文件缓存和SD卡的缓存。
4)支持图片下载过程的监听。
5)对Bitmap进行裁剪,避免Bitmap占用过多的内存。
6)可以控制图片的加载过程,如暂停图片加载,重新加载图片,一般在ListView,GridView,滑动的过程中暂停加载图片,停止的时候加载图片。
7)可以在较慢的网络下对图片进行加载。
使用前应该把ImageLoader的jar包配置到项目中:
1.创建一个MyApplication,继承Application,在onCreate中初始化ImageLoader。 全局配置
2)也可以自定义ImageLoader配置参数
1)使用loadimage来加载图片
4)使用ListView,GridView加载图片
使用GridView,ListView来显示大量的图片,而当我们快速滑动GridView,ListView,我们希望能停止图片的加载,而在GridView,ListView停止滑动的时候加载当前界面的图片,这个框架当然也提供这个功能,使用起来也很简单,它提供了PauseOnScrollListener这个类来控制ListView,GridView滑动过程中停止去加载图片,该类使用的是代理模式。
第一个参数就是我们的图片加载对象ImageLoader, 第二个是控制是否在滑动过程中暂停加载图片,如果需要暂停传true就行了,第三个参数控制猛的滑动界面的时候图片是否加载。
5)避免OOM
虽然这个框架有很好的缓存机制,有效的避免了OOM的产生,一般的情况下产生OOM的概率比较小,但是并不能保证OutOfMemoryError永远不发生,这个框架对于OutOfMemoryError做了简单的catch,保证我们的程序遇到OOM而不被crash掉,但是如果我们使用该框架经常发生OOM,我们应该怎么去改善呢?
减少线程池中线程的个数,在ImageLoaderConfiguration中的(.threadPoolSize)中配置,推荐配置1-5
在DisplayImageOptions选项中配置bitmapConfig为Bitmap.Config.RGB_565,因为默认是ARGB_8888, 使用RGB_565会比使用ARGB_8888少消耗2倍的内存
在ImageLoaderConfiguration中配置图片的内存缓存为memoryCache(new WeakMemoryCache()) 或者不使用内存缓存
在DisplayImageOptions选项中设置.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者imageScaleType(ImageScaleType.EXACTLY)
1)可以实现多线程下载图片,图片可以来源于网络,文件和assets,drawable本地等。
2)可以随意的配置ImageLoader。例如线程池,图片下载器,内存缓存策略,硬盘缓存策略,图片显示以及其它一些配置。
3)缓存方面:支持图片的内存缓存,文件缓存和SD卡的缓存。
4)支持图片下载过程的监听。
5)对Bitmap进行裁剪,避免Bitmap占用过多的内存。
6)可以控制图片的加载过程,如暂停图片加载,重新加载图片,一般在ListView,GridView,滑动的过程中暂停加载图片,停止的时候加载图片。
7)可以在较慢的网络下对图片进行加载。
使用前应该把ImageLoader的jar包配置到项目中:
1.创建一个MyApplication,继承Application,在onCreate中初始化ImageLoader。 全局配置
1)创建默认的ImageLoader配置参数
public void onCreate() {
super.onCreate();
//创建默认的ImageLoader参数
ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(this);
ImageLoader.getInstance().init(configuration);
}
2)也可以自定义ImageLoader配置参数
File cacheDir =getExternalCacheDir();//外部存储
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this)
.memoryCacheExtraOptions(480, 800) // default = device screen dimensions
.threadPoolSize(3) // default
.threadPriority(Thread.NORM_PRIORITY - 1) // default 设置线程的优先级
.tasksProcessingOrder(QueueProcessingType.FIFO) // default
.denyCacheImageMultipleSizesInMemory()
.memoryCache(new LruMemoryCache(2 * 1024 * 1024))//可以通过自己的内存缓存实现
.memoryCacheSize(2 * 1024 * 1024)//内存缓存的最大值
.memoryCacheSizePercentage(13) // default
.diskCache(new UnlimitedDiskCache(cacheDir)) // default
.diskCacheSize(50 * 1024 * 1024)//50 Mb sd卡(本地)缓存的最大值
.diskCacheFileCount(100)//可以缓存的文件数量
.diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default
.imageDownloader(new BaseImageDownloader(this)) // default
//默认的显示图片配置,可以理解为一般客户的口味(可以理解为上面厨房比喻)
.defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
.writeDebugLogs()
.build();
ImageLoader.getInstance().init(config);
1)使用loadimage来加载图片
imageView = (ImageView) findViewById(R.id.imageView);
ImageLoader.getInstance().loadImage(imageUrl, new ImageLoadingListener() {
@Override
public void onLoadingStarted(String s, View view) {
//开始下载
}
@Override
public void onLoadingFailed(String s, View view, FailReason failReason) {
//下载失败
}
@Override
public void onLoadingComplete(String s, View view, Bitmap bitmap) {
//下载完成
imageView.setImageBitmap(bitmap);//将下载的图片设置给ImageView即可
Log.i("log","ok");
}
@Override
public void onLoadingCancelled(String s, View view) {
//取消下载
}
});
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.mipmap.ic_launcher)//加载中的图片
.showImageOnFail(R.mipmap.error)//加载错误时显示的图片
.cacheInMemory(true)//设置内存缓存
.cacheOnDisk(true)//设置硬盘缓存
.bitmapConfig(Bitmap.Config.RGB_565)
.build();
//如果不需要监听,只需要设置前三个参数即可
ImageLoader.getInstance().displayImage(imageUrl, imageView, options, new SimpleImageLoadingListener(), new ImageLoadingProgressListener() {
@Override
public void onProgressUpdate(String imageUri, View view, int current,
int total) {
}
});
3)加载其它来源的图片
//图片来源于Content provider
String contentprividerUrl = "content://media/external/audio/albumart/13";
//图片来源于assets
String assetsUrl = Scheme.ASSETS.wrap("image.png");
//图片来源于文件
String drawableUrl = Scheme.DRAWABLE.wrap("R.drawable.image");
4)使用ListView,GridView加载图片
使用GridView,ListView来显示大量的图片,而当我们快速滑动GridView,ListView,我们希望能停止图片的加载,而在GridView,ListView停止滑动的时候加载当前界面的图片,这个框架当然也提供这个功能,使用起来也很简单,它提供了PauseOnScrollListener这个类来控制ListView,GridView滑动过程中停止去加载图片,该类使用的是代理模式。
listView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));
gridView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));
第一个参数就是我们的图片加载对象ImageLoader, 第二个是控制是否在滑动过程中暂停加载图片,如果需要暂停传true就行了,第三个参数控制猛的滑动界面的时候图片是否加载。
5)避免OOM
虽然这个框架有很好的缓存机制,有效的避免了OOM的产生,一般的情况下产生OOM的概率比较小,但是并不能保证OutOfMemoryError永远不发生,这个框架对于OutOfMemoryError做了简单的catch,保证我们的程序遇到OOM而不被crash掉,但是如果我们使用该框架经常发生OOM,我们应该怎么去改善呢?
减少线程池中线程的个数,在ImageLoaderConfiguration中的(.threadPoolSize)中配置,推荐配置1-5
在DisplayImageOptions选项中配置bitmapConfig为Bitmap.Config.RGB_565,因为默认是ARGB_8888, 使用RGB_565会比使用ARGB_8888少消耗2倍的内存
在ImageLoaderConfiguration中配置图片的内存缓存为memoryCache(new WeakMemoryCache()) 或者不使用内存缓存
在DisplayImageOptions选项中设置.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者imageScaleType(ImageScaleType.EXACTLY)