android imageview 回收,android – 在列表视图上回收位图会导致问题

博主探讨了在ListView中如何实现图片的LRU缓存策略,以节省内存。在滚动列表加载新项目时,尝试回收不再显示的图片资源。然而遇到一个问题,即使回收了不在屏幕上的图片,但部分正在显示的图像也会丢失。问题可能出在位图回收的逻辑上,导致当前可视的位图也被错误地回收。博客中展示了部分关键代码,并寻求解决方案。
摘要由CSDN通过智能技术生成

我有一个列表视图,其中显示图像,这些图像下载和正确缓存.当我向下滚动列表并加载新项目时,我想回收最近最少使用的项目以节省内存.我已经成功实现了LRU Map,并在位图上调用了回收,这些位图在屏幕上是不可见的.以下是代码的一部分:

imageView是一个ViewGroup

public void recycleImage(int res) {

if (imageView != null) {

imageView.setBackgroundDrawable(null);

if (res > 0)

imageView.setBackgroundResource(res);

}

if (bitmap != null && !bitmap.isRecycled()) {

bitmap.recycle();

Log.i(TAG, "Bitmap recycled");

}

}

这些值保存在适配器的getView方法中.问题是,当我回收图像时,我可以看到屏幕上可见的图像也会丢失(请注意我只回收我知道的图像不在屏幕上).

当我在listview上回收其他人的位图时,有没有人知道为什么我会丢失当前显示的图像?

这是我访问存储的位图或下载它的地方.

if (mImageMap.containsKey(url)) {

ImageCacheModel cache = mImageMap.get(url);

return cache.getBitmap();

} else if (cacheManager.isUrlCached(url)) {

mImageMap.put(url, new ImageCacheModel(imageView, cacheManager.getCachedBitmapOrNull(url, 2)));

ImageCacheModel cache = mImageMap.get(url);

return cache.getBitmap();

} else {

cacheManager.addUrlToQueue(url, this, true);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值