Андроид Universal Image Loader с одинаковым URL-адресом отменяется

Я пытаюсь загрузить изображения в растровые изображения, используя UIL. Мне нужно загрузить несколько изображений, и я заметил, что в некоторых случаях URL-адреса изображений могут быть одинаковыми. И в таких случаях загружается только первое изображение. Как избежать отмены запроса в UIL?

Код запускается 3 раза в цикле:

ImageSize targetSize = new ImageSize(70, 70); ImageLoader.getInstance().loadImage("http://icons.iconarchive.com/icons/yellowicon/game-stars/256/Mario-icon.png", targetSize, new ImageLoadingListener() { @Override public void onLoadingStarted(String imageUri, View view) { Log.e("tag", "onLoadingStarted"); } @Override public void onLoadingFailed(String imageUri, View view, FailReason failReason) { Log.e("tag", "onLoadingFailed"); } @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { Log.e("tag", "onLoadingComplete"); } @Override public void onLoadingCancelled(String imageUri, View view) { Log.e("tag", "onLoadingCancelled"); } }); 

Журналы:

 onLoadingStarted onLoadingStarted onLoadingStarted onLoadingComplete onLoadingCancelled onLoadingCancelled 

UIL отменяет предыдущую displayImage(...) для того же ImageView.

UIL отменяет предыдущую loadImage(...) для того же URL-адреса.

Фактически для обоих случаев UIL работает с ImageAware s внутри и сравнивает ImageAware.getId() чтобы принять решение об отмене задачи или нет.

В вашем случае, чтобы предотвратить отмену задачи, вы можете сделать следующее:

 ImageSize targetSize = new ImageSize(70, 70); ImageAware imageAware = new NonViewAware(targetSize, ViewScaleType.CROP); ImageLoader.getInstance().displayImage("http://icons...", imageAware, ...); 

Привет, у меня была такая же проблема с несколькими одинаковыми uri во время вызова в одно и то же время. Я разработал Custom class, который использует ImageLoader и решает проблему

 public static MyMusicImageLoader myMusicImageLoader; public ImageLoader imageLoader; public Map<String,MImageLoader> mImageLoaderMap = new HashMap<String, MImageLoader>(); public static MyMusicImageLoader getInstance(){ if(myMusicImageLoader==null) myMusicImageLoader = new MyMusicImageLoader(); return myMusicImageLoader; } public MyMusicImageLoader(){ imageLoader = ImageLoader.getInstance(); } public void loadImage(final String url,ImageLoadingListener imageLoadingListener){ MImageLoader mImageLoader = mImageLoaderMap.get(url); if(mImageLoader==null){ mImageLoader = new MImageLoader(url); mImageLoader.addImageLoadingListener(imageLoadingListener); mImageLoaderMap.put(url,mImageLoader); imageLoader.loadImage(url, new SimpleImageLoadingListener(){ @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { setAllMImageLoader(url,loadedImage); } }); }else{ mImageLoader.addImageLoadingListener(imageLoadingListener); } } public void setAllMImageLoader(String url, Bitmap bitmap){ MImageLoader mImageLoader = mImageLoaderMap.remove(url); ArrayList<ImageLoadingListener> imageLoadingListeners = mImageLoader.imageLoadingListeners; for(int i=0; i<imageLoadingListeners.size(); i++){ ImageLoadingListener imageLoadingListener = imageLoadingListeners.get(i); imageLoadingListener.onLoadingComplete("",null,bitmap); } imageLoadingListeners.clear(); } class MImageLoader{ String imageUrl; ArrayList<ImageLoadingListener> imageLoadingListeners = new ArrayList<ImageLoadingListener>(); MImageLoader(String imageUrl){ this.imageUrl = imageUrl; } void addImageLoadingListener(ImageLoadingListener imageLoadingListener){ imageLoadingListeners.add(imageLoadingListener); } }