ListView 中的 Android Universal ImageLoader 滚动非常慢

标签 android universal-image-loader

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

我用了Android-Universal-Image-Loader从本地 sdcard 异步加载图像。我在自定义应用程序类的 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左右。不知道是不是原图太大了。

感谢您的建议!

最佳答案

发现发生了什么。

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

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

解决方法:

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

参见 Useful Info获取更多信息。

关于ListView 中的 Android Universal ImageLoader 滚动非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25737625/

相关文章:

java - 如何从 doinbackground() 执行其他线程

android - 具有通用图像加载器的 ListView 自定义适配器错误地回收图像

android - 防止 untrusted_app 访问数据库

android - ImageLoader DisplayImage功能快速查询

java - 使用 Dagger 2 进行 Presenter 注入(inject)

android - 我想测量 ListView 的高度(getHight() = 0)

android - 是否可以从 picasso 的缓存中下载图像?

android - 使用 Universal Image Loader 加载联系人照片

java - Android - java.lang.ArrayIndexOutOfBoundsException

android - 将 Android 库添加到项目中?