【发布时间】:2014-09-09 06:02:47
【问题描述】:
我有一个 ListView,其中包含具有不同数量图像的项目。每个项目都被放入具有水平 LinearLayout 的 HorizontalScrollView 中,我将 ImageViews 动态添加到 LinearLayout 中。
我使用Android-Universal-Image-Loader 从本地 sdcard 异步加载图像。我在自定义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。不知道是不是原图太大了。
感谢您的建议!
【问题讨论】:
-
在您的
DisplayImageOptions中尝试.resetViewBeforeLoading(true)。您也可以通过.delayBeforeLoading(100)查询 -
您是否授予权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />和<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> -
尝试使用 AndroidQuery 代替 Universal Image-Loader AndroidQuery : code.google.com/p/android-query
-
@Chirag Jain 我有权限。我可以看到 ImageLoader 的日志:在内存中缓存图像 [file:///....jpg_1080x1800],但是如果我去那个目录我看不到缓存文件。我没有收到指示缓存是否失败的警告消息。
-
@Skynet 我尝试了 .resetViewBeforeLoading(true) 但仍然重新加载非常慢。谢谢。
标签: android universal-image-loader