在Android 开发中,我们经常用到从服务器下载图片,显示到我们的界面上。下面我们介绍一个常用的图片加载库的使用,我们现在开发的“盯盯”,也是使用了这个库。这个库就是:Universal Image Loader。在github上的地址是:https://github.com/nostra13/Android-Universal-Image-Loader 。 下面我们详细介绍一下用法及注意事项。
1. 首先从上面的地址中下载 JAR 库文件,放到工程的libs中即可。
2. 在应用的 Application 的 OnCreat 中初始化配置。
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
.threadPoolSize(4)//线程池内加载的数量
.threadPriority(Thread.NORM_PRIORITY - 2)
.denyCacheImageMultipleSizesInMemory()
.diskCacheFileNameGenerator(new Md5FileNameGenerator())
.diskCacheSize(30 * 1024 * 1024) // 30 Mb
.tasksProcessingOrder(QueueProcessingType.LIFO)
.build();
ImageLoader.getInstance().init(config);
3. 在需要加载图片的地方,调用displayImage 方法加载图片。此处可是设置显示时的options以及 Listener.
Options 是加载时的选项,可以设置加载图片时的默认图片,缓存设置,显示图片配置等等。 比如我们可以设置这样图片加载之中的默认图片,是否缓存在内存中,配置为圆角矩形显示等。 更详细的介绍大家可以查看源代码。
4. 对于listview 或者gridview等滑动性的控件,为了避免滑动过程中加载大量的图片,造成界面卡顿的现象,需要为listview 或者gridview设置滑动监听,当在滑动的时候,停止加载图片,库里面实现了一个类 PauseOnScrollListener ,大家可以参考使用:
boolean pauseOnScroll = true; // or false
boolean pauseOnFling = true; // or false
PauseOnScrollListener listener = new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling);
listView.setOnScrollListener(listener);
5. 如果经常在加载图片的时候出现OutOfMemoryError, 尝试以下建议:
Disable caching in memory.
Reduce thread pool size in configuration (.threadPoolSize(...)). 1 - 5 is recommended.
Use .bitmapConfig(Bitmap.Config.RGB_565) in display options.
Use .imageScaleType(ImageScaleType.EXACTLY)
6.图片在存储设备上的缓存文件,可以用以下方法获得:
DiskCache diskCache = ImageLoader.getInstance().getDiskCache();
File cacheFile = DiskCacheUtils.findInCache(imgpath, diskCache);
|