我正在将服务器中的图像下载到ListView
并将其存储到SD卡中。
当下次listview出现时,我只使用异步方法从SD卡访问它,i 使用这个approch,这样每个用户都不需要访问服务器。
但是当所有图像从SD卡加载到listview中并且我滚动它时 非常快,然后每次尝试从SD卡访问它而不是从Caches我猜。
当从服务器下载图像时我也遇到了同样的问题,这也就是为什么我想将它存储到SD卡中。但我面临同样的问题。
这是我的代码ListImageDownloader。在那里有一个名为downloadBitmap(String)
的函数,我创建了另一个名为downloadSDBitmap(String)
的函数,其代码如下
Bitmap downloadSDBitmap(String urlId) {
Bitmap bitmap = null;
File file = new File(
fileLoc +"/"+ urlId+".png");
if(file.exists()){
Log.d("PATH" , file.getAbsolutePath());
bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
}
return bitmap;
}
除此之外,整个缓存代码都是一样的。所以任何人都可以帮助我如何在Gtalk
Android应用程序中进行改进,当我快速滚动它只加载图像一次之后如果我快速滚动图像保持原样并且不从网络获取
更新
这些是我的参数
final static int MAX_ENTRIES = 150;
private static final int HARD_CACHE_CAPACITY =50;
private static final int DELAY_BEFORE_PURGE = 10 * 1000; // in milliseconds
答案 0 :(得分:1)
缓存从根本上依赖于可用内存。如果你的应用程序还有内存,你需要实现一个很好的解决方案来缓存你的位图。
在过去,SoftReference
/ WeakReference
是一种缓存位图的流行方法(我在一年前尝试过,你可以阅读我的question about this here)。但是在后来的Android API中,垃圾收集器变得更加积极地收集它们,因此它们不再被推荐。
现在建议使用LRU cache。 Android developers website上有一个示例。