ListView中的Android Universal ImageLoader滚动非常慢

时间:2014-09-09 06:02:47

标签: android universal-image-loader

我有一个ListView,其中的项目具有不同数量的图像。每个项目都放入一个水平LinearLayout的Horizo​​ntalScrollView中,我将ImageViews动态添加到LinearLayout中。

我使用Android-Universal-Image-Loader异步加载来自本地SD卡的图像。我在自定义Application类的onCreate方法中设置了ImageLoaderConfiguration:

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
        .threadPriority(Thread.NORM_PRIORITY - 2)
        .denyCacheImageMultipleSizesInMemory()
        .diskCacheFileNameGenerator(new Md5FileNameGenerator())
        .diskCacheSize(200 * 1024 * 1024) // 200 Mb
        .tasksProcessingOrder(QueueProcessingType.LIFO)
        .writeDebugLogs() // Remove for release app
        .build();
ImageLoader.getInstance().init(config);

在Adapter类的构造函数方法中设置DisplayImageOptions:

options = new DisplayImageOptions.Builder()
        .showImageOnLoading(R.drawable.ic_loading)
        .showImageForEmptyUri(R.drawable.ic_loading_failed)
        .showImageOnFail(R.drawable.ic_loading_failed)
        .cacheInMemory(true)
        .cacheOnDisk(true)
        .considerExifParams(true)
        .build();

我在getView方法中动态加载图像:

ImageLoader.getInstance().displayImage(imageURI, imageView, options);

我的问题是,当我滚动ListView时,图像将重新加载非常慢,实际上与第一次加载速度相同。似乎每个图像都是从磁盘加载而没有缓存。

PS:我的照片大多是从相机拍摄的,大小约为2MB~3MB。我不确定是不是因为原始图像太大了。

感谢您的建议!

1 个答案:

答案 0 :(得分:3)

发现了正在发生的事情。

简而言之:缓存的图片太大了。

我使用ImageView的相对大小:[wrap_content,match_parent]而不是设置固定大小。所以ImageLoader缓存了我在日志中看到的所有图像的最大可能尺寸,这是我的设备尺寸:1080x1800。而且这也非常大,导致重新加载缓慢。

要解决它:

设置ImageView的固定大小。或者,如果您不想,请设置ImageView的最大可能宽度和高度。设置最大高度后,我的图像缓存到250x250,加载延迟几乎消失。

有关详细信息,请参阅Useful Info