docs: public void displayImage(String uri, ImageAware imageAware, DisplayImageOptions options,
  			ImageSize targetSize, ImageLoadingListener listener, ImageLoadingProgressListener progressListener) {
  		checkConfiguration();
  		if (imageAware == null) {
  			throw new IllegalArgumentException(ERROR_WRONG_ARGUMENTS);
  		}
  		if (listener == null) {
  			listener = defaultListener;
  		}
  		if (options == null) {
  			options = configuration.defaultDisplayImageOptions;
  		}
  
  		if (TextUtils.isEmpty(uri)) {
  			engine.cancelDisplayTaskFor(imageAware);
  			listener.onLoadingStarted(uri, imageAware.getWrappedView());
  			if (options.shouldShowImageForEmptyUri()) {
  				imageAware.setImageDrawable(options.getImageForEmptyUri(configuration.resources));
  			} else {
  				imageAware.setImageDrawable(null);
  			}
  			listener.onLoadingComplete(uri, imageAware.getWrappedView(), null);
  			return;
  		}
  
  		if (targetSize == null) {
  			targetSize = ImageSizeUtils.defineTargetSizeForView(imageAware, configuration.getMaxImageSize());
  		}
  		String memoryCacheKey = MemoryCacheUtils.generateKey(uri, targetSize);
  		engine.prepareDisplayTaskFor(imageAware, memoryCacheKey);
  
  		listener.onLoadingStarted(uri, imageAware.getWrappedView());
  
  		Bitmap bmp = configuration.memoryCache.get(memoryCacheKey);
  		if (bmp != null && !bmp.isRecycled()) {
  			L.d(LOG_LOAD_IMAGE_FROM_MEMORY_CACHE, memoryCacheKey);
  
  			if (options.shouldPostProcess()) {
  				ImageLoadingInfo imageLoadingInfo = new ImageLoadingInfo(uri, imageAware, targetSize, memoryCacheKey,
  						options, listener, progressListener, engine.getLockForUri(uri));
  				ProcessAndDisplayImageTask displayTask = new ProcessAndDisplayImageTask(engine, bmp, imageLoadingInfo,
  						defineHandler(options));
  				if (options.isSyncLoading()) {
  					displayTask.run();
  				} else {
  					engine.submit(displayTask);
  				}
  			} else {
  				options.getDisplayer().display(bmp, imageAware, LoadedFrom.MEMORY_CACHE);
  				listener.onLoadingComplete(uri, imageAware.getWrappedView(), bmp);
  			}
  		} else {
  			if (options.shouldShowImageOnLoading()) {
  				imageAware.setImageDrawable(options.getImageOnLoading(configuration.resources));
  			} else if (options.isResetViewBeforeLoading()) {
  				imageAware.setImageDrawable(null);
  			}
  
  			ImageLoadingInfo imageLoadingInfo = new ImageLoadingInfo(uri, imageAware, targetSize, memoryCacheKey,
  					options, listener, progressListener, engine.getLockForUri(uri));
  			LoadAndDisplayImageTask displayTask = new LoadAndDisplayImageTask(engine, imageLoadingInfo,
  					defineHandler(options));
  			if (options.isSyncLoading()) {
  				displayTask.run();
  			} else {
  				engine.submit(displayTask);
  			}
  		}
  	}