我正在使用 Android BitmapFun 示例代码来管理我的应用程序中的位图。我在 ViewPager 中遇到了乱码或重复的图像。我已将其追溯到 ImageCache.java 中的以下代码:
/**
* Notify the removed entry that is no longer being cached
*/
@Override
protected void entryRemoved(boolean evicted, String key,
BitmapDrawable oldValue, BitmapDrawable newValue) {
if (RecyclingBitmapDrawable.class.isInstance(oldValue)) {
// The removed entry is a recycling drawable, so notify it
// that it has been removed from the memory cache
((RecyclingBitmapDrawable) oldValue).setIsCached(false);
} else {
// The removed entry is a standard BitmapDrawable
if (Utils.hasHoneycomb()) {
// We're running on Honeycomb or later, so add the bitmap
// to a SoftRefrence set for possible use with inBitmap later
mReusableBitmaps.add(new SoftReference<Bitmap>(oldValue.getBitmap()));
}
}
}
当从缓存中删除位图时,它会被添加到可重用位图列表中。在这种情况下,位图仍被 ViewPager 视图使用。当稍后创建视图时,位图(仍在使用)被重用,并且位图出现在 ViewPager 中的两个位置。
从 LruCache 中删除的位图不一定可供重用。我已禁用此代码中位图的重用,并且不再有问题。较低分辨率的图像不会出现此问题,因为位图在 ViewPager 的屏幕外限制范围内不会从缓存中删除。我对 60 DPI 图像没有问题,但在 160 DPI 时经常看到这个问题。我认为这会出现在具有更高分辨率图像的原始 BitmapFun 示例中。
其他人遇到过这个问题还是我没有正确理解这个问题?
凯文