Android 在listview中无法正确访问缓存中的图像

Android 在listview中无法正确访问缓存中的图像,android,android-listview,android-imageview,Android,Android Listview,Android Imageview,我正在将图像从服务器下载到列表视图中,并将其存储到SD卡中 当下次出现listview时,我只使用异步方法从SD卡访问它,我 使用这种方法,用户无需访问服务器上的所有内容 但是当所有的图像都从SD卡加载到listview时,如果我滚动它 我猜,每次它试图只从SD卡而不是从缓存访问它时,速度都相当快 当图像也从服务器下载时,我也面临同样的问题,这就是为什么我想把它存储到SD卡中。但我面临着同样的问题 这是我的密码。其中有一个函数名为downloadBitmap(String),我创建了另一个函数名

我正在将图像从服务器下载到
列表视图中
,并将其存储到SD卡中

当下次出现listview时,我只使用异步方法从SD卡访问它,我 使用这种方法,用户无需访问服务器上的所有内容

但是当所有的图像都从SD卡加载到listview时,如果我滚动它 我猜,每次它试图只从SD卡而不是从缓存访问它时,速度都相当快

当图像也从服务器下载时,我也面临同样的问题,这就是为什么我想把它存储到SD卡中。但我面临着同样的问题

这是我的密码。其中有一个函数名为
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;

}
除此之外,整个缓存代码都是相同的。那么,有谁能帮助我如何改进它,就像在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

缓存基本上依赖于可用内存。如果应用程序还有内存,则需要实现一个好的解决方案来缓存位图

过去,
SoftReference
/
WeakReference
是一种流行的位图缓存方法(我在一年前就尝试过,你可以阅读我的文章)。但是在Android的后期API中,垃圾收集器已经变得更加积极地收集这些API,因此不再推荐它们


现在,建议使用一个。上有一个例子。

我想这需要包含android支持包库,这不需要增加我的应用程序的大小,所以你有其他解决方案吗?一年前,我被迫编写自己的LRU实现。检查我问题的答案,你需要知道的都写在那里。雪莉,你有参考代码吗?因为我正在尝试集成您的问题中建议的代码。我需要用建议的代码替换sSoftBitmapCache吗?@Hunt:我现在已经编写了一个演示应用程序。请在此处查看:对于未来的读者,URL现在是: