我正在使用Universal Image Loader 1.8.6库来加载从网络上获取的动态图像。
配置ImageLoaderConfiguration
如下:
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
.memoryCacheExtraOptions(480, 800) // default = device screen dimensions
.threadPoolSize(3) // default
.threadPriority(Thread.NORM_PRIORITY - 1) // default
.denyCacheImageMultipleSizesInMemory()
.memoryCacheSize(2 * 1024 * 1024)
.memoryCacheSizePercentage(13) // default
.discCacheSize(50 * 1024 * 1024)
.discCacheFileCount(100)
.imageDownloader(new BaseImageDownloader(getApplicationContext())) // default
.defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
.writeDebugLogs()
.build();
DisplayImageOptions
配置是:
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.no_foto)
.showImageForEmptyUri(R.drawable.no_foto)
.showImageOnFail(R.drawable.no_foto)
.build();
我的 ArrayAdapter 中的 getView 方法包含以下代码:
iv.setImageResource(R.drawable.no_foto);
imageLoader.displayImage(basePath+immagine, iv);
上面代码的第一行只是为了避免gridView中视图的回收允许将图片设置在错误的位置(直到图片没有被下载)。
实际问题是这样的:
如果我打开我的活动(包含GridView
),由于 UIL 库,显示的项目可以下载图像。(同时no_foto.png
图像显示在网格的每个视图中)。当所有视图都加载了自己的图像时,如果我尝试向下滚动然后返回(向上滚动),我必须等待图像重新加载,因为所有视图现在都被no_foto.png
图像占用。
如何避免重新加载这些图像?使用通用图像加载器,我可以缓存以前加载的图像吗?
注意:由于我的网格可以包含许多图像,我会使用disk cache
(不是内存缓存)的实现。我发现.discCacheFileCount()
可以用于设置缓存文件的最大数量,为什么我的文件似乎没有缓存?