From 534923dc56260dc6889e0fc4892093db6f9d0e1d Mon Sep 17 00:00:00 2001 From: Vitaly Olshevsky Date: Fri, 26 Oct 2012 17:41:46 +0300 Subject: [PATCH] Bitmap actuallity must be checked before displaying in the UI thread as well --- .../core/DisplayBitmapTask.java | 13 ++++++++++--- .../core/LoadAndDisplayImageTask.java | 2 +- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/UniversalImageLoader/src/com/nostra13/universalimageloader/core/DisplayBitmapTask.java b/UniversalImageLoader/src/com/nostra13/universalimageloader/core/DisplayBitmapTask.java index d3d956735..4934fe591 100644 --- a/UniversalImageLoader/src/com/nostra13/universalimageloader/core/DisplayBitmapTask.java +++ b/UniversalImageLoader/src/com/nostra13/universalimageloader/core/DisplayBitmapTask.java @@ -18,16 +18,23 @@ final class DisplayBitmapTask implements Runnable { private final ImageView imageView; private final BitmapDisplayer bitmapDisplayer; private final ImageLoadingListener listener; + private final String memoryCacheKey; - public DisplayBitmapTask(Bitmap bitmap, ImageView imageView, BitmapDisplayer bitmapDisplayer, ImageLoadingListener listener) { + public DisplayBitmapTask(Bitmap bitmap, ImageView imageView, BitmapDisplayer bitmapDisplayer, ImageLoadingListener listener, String memoryCacheKey) { this.bitmap = bitmap; this.imageView = imageView; this.bitmapDisplayer = bitmapDisplayer; this.listener = listener; + this.memoryCacheKey = memoryCacheKey; } public void run() { - Bitmap displayedBitmap = bitmapDisplayer.display(bitmap, imageView); - listener.onLoadingComplete(displayedBitmap); + String currentCacheKey = ImageLoader.getInstance().getLoadingUriForView(imageView); + if (memoryCacheKey.equals(currentCacheKey)) { + Bitmap displayedBitmap = bitmapDisplayer.display(bitmap, imageView); + listener.onLoadingComplete(displayedBitmap); + } else { + listener.onLoadingCancelled(); + } } } diff --git a/UniversalImageLoader/src/com/nostra13/universalimageloader/core/LoadAndDisplayImageTask.java b/UniversalImageLoader/src/com/nostra13/universalimageloader/core/LoadAndDisplayImageTask.java index 194887efb..0c89fbf5a 100644 --- a/UniversalImageLoader/src/com/nostra13/universalimageloader/core/LoadAndDisplayImageTask.java +++ b/UniversalImageLoader/src/com/nostra13/universalimageloader/core/LoadAndDisplayImageTask.java @@ -90,7 +90,7 @@ public void run() { if (configuration.loggingEnabled) Log.i(ImageLoader.TAG, String.format(LOG_DISPLAY_IMAGE_IN_IMAGEVIEW, imageLoadingInfo.memoryCacheKey)); DisplayBitmapTask displayBitmapTask = new DisplayBitmapTask(bmp, imageLoadingInfo.imageView, imageLoadingInfo.options.getDisplayer(), - imageLoadingInfo.listener); + imageLoadingInfo.listener, imageLoadingInfo.memoryCacheKey); handler.post(displayBitmapTask); }