/** * checks whether a previous task is loading the same url * * @param url url of the image to be fetched * @param oldTask task that might already fetching an image, might be null * @return true if there is no other concurrent task running */ private boolean checkConcurrentTasks(String url, LoaderTask oldTask) { if (oldTask == null || (!url.equals(oldTask.getUrl()))) { oldTask.cancel(true); } else { // task != null && url == task.getUrl // there is already a concurrent task fetching the image return false; } return true; }
@Override public void load(ImageView imageView) { ImageWrapper w = new ImageWrapper(imageView); if (w.getUrl() == null) { Log.w("ImageLoader", "You should never call load if you don't set a ImageTag on the view"); return; } if (checkConcurrentTasks(w.getUrl(), w.getLoaderTask())) { // only continue if a concurrent task has not yet been started try { // get bitmap from cache Bitmap b = loaderContext.getCache().get(w.getUrl(), w.getHeight(), w.getWidth()); if (b != null && !b.isRecycled()) { w.setBitmap(b); return; } // get preview or loading image String thumbUrl = w.getPreviewUrl(); if (thumbUrl != null) { b = loaderContext.getCache().get(thumbUrl, w.getPreviewHeight(), w.getPreviewWidth()); if (b != null && !b.isRecycled()) { w.setBitmap(b); } else { setResource(w, w.getLoadingResourceId()); } } else { setResource(w, w.getLoadingResourceId()); } if (w.isUseCacheOnly()) { return; } // spin off a new task for this url LoaderTask task = new LoaderTask(imageView, loaderContext); w.setLoaderTask(task); task.execute(); } catch (ImageNotFoundException inf) { setResource(w, w.getNotFoundResourceId()); } catch (Throwable t) { setResource(w, w.getNotFoundResourceId()); } } }