public void queryCache(String url, ImageCacheListener listener, DownloadRequest downloadRequest) { if (url == null) { listener.onImageNotFound(this, url, downloadRequest); return; } String fullSizeCacheKey = getCacheKey(url); String scaledCacheKey = ""; int desiredWidth = downloadRequest.getListener().getDesiredWidth(); int desiredHeight = downloadRequest.getListener().getDesiredHeight(); if (desiredWidth > 0 && desiredHeight > 0) { scaledCacheKey = getCacheKey(url, desiredWidth, desiredHeight); synchronized (mMemoryCache) { Bitmap scaledBitmap = mMemoryCache.get(scaledCacheKey); if (scaledBitmap != null) { listener.onImageFound(this, scaledBitmap, url, downloadRequest); return; } } } // First check the in-memory cache... synchronized (mMemoryCache) { Bitmap cachedBitmap = mMemoryCache.get(fullSizeCacheKey); if (cachedBitmap != null) { // ...notify listener immediately, no need to go async listener.onImageFound(this, cachedBitmap, url, downloadRequest); return; } } if (mDiskCache != null) { ThreadPoolAsyncTaskRunner.runTaskOnPool( ThreadPoolAsyncTaskRunner.THUMBNAIL_THREAD_POOL, new BitmapDecoderTask(url, listener, downloadRequest), (Object[]) null); return; } listener.onImageNotFound(this, url, downloadRequest); }
@Override protected void onPostExecute(Bitmap result) { if (result != null) { storeToMemory(result, getCacheKey(mUrl)); mListener.onImageFound(ImageCache.this, result, mUrl, mDownloadRequest); } else { mListener.onImageNotFound(ImageCache.this, mUrl, mDownloadRequest); } }