3

В Github имеется много популярных загрузчиков изображений для загрузки и кеширования изображений и управления обращением с изображениями.Отмена запроса изображения Android на основе прогресса - загрузчик изображений Volley, Picasso

  1. Универсальный Image Loader
  2. Volley
  3. Picasso
  4. Фреско (добавлено enhancement)

я наткнулся на требование, если ImageView, если больше не привязаны к окну запроса (партия и полет) будут отменены.

Однако прокрутки виджета, как Listview и GridviewImageView часто присоединять и отсоединять от окна, и поэтому запрос в очереди отменяются соответственно.

Меня беспокоит то, что их нет механизма, чтобы проследить ход запроса изображения во всех выше библиотеке .Если ImageView отсоединяется запрос должен быть отменен на основании прогресса, если поток байтов уже сделано 75% работы, то она не должна быть отменена, что, в свою очередь, приведет к снижению пропускной способности сети и уменьшить сетевой вызов, как обычно, пользователь всегда прокручивать много в Scrolling Widget как Listview и Gridview и т.д ..

Вот мое понимание с Volley:

public boolean removeContainerAndCancelIfNecessary(ImageContainer container) { 

    /* logic to check progress of Request */ 
    mContainers.remove(container); 
    if (mContainers.size() == 0) { 

     mRequest.cancel(); 
     return true; 
    } 
    return false; 
} 

Вот мое понимание с Пикассо:

private void cancelExistingRequest(Object target) { 

    checkMain(); 
    Action action = targetToAction.remove(target); 
    if (action != null) { 

     action.cancel(); 
     dispatcher.dispatchCancel(action); 
    } 
    if (target instanceof ImageView) { 

     ImageView targetImageView = (ImageView) target; 
     DeferredRequestCreator deferredRequestCreator = targetToDeferredRequestCreator.remove(targetImageView); 
     if (deferredRequestCreator != null) { 

      deferredRequestCreator.cancel(); 
     } 
    } 
} 

Вот мое понимание с Универсальной Loader Изображение: Я не фигурировал Универсальный загрузчик света позволяет отменить запрос на инлайн.

void cancelDisplayTaskFor(ImageAware imageAware) { 

    cacheKeysForImageAwares.remove(imageAware.getId()); 
} 

Пожалуйста, дайте мне знать, возможность решить эту проблему только для сетевого запроса. Если изображение уже кэшировано, мы отменим запрос.

Производительность батареи действительно важно в Android

+0

Я думаю, что вместо того, чтобы отменить запрос до или ДО 60%, попробуйте кэш изображений один раз и использовать его после того, как слово, так что может занять меньше интернет обыкновений сравнить отмены запроса и еще раз, когда нужно свеже получить то же изображение и да вы попробуйте AndroidQuery для загрузки асинхронного изображения вместо этой трех библиотек: http: //code.google.com/p/android-query/ –

+0

запрос предназначен для сетевого вызова, а не для кешированных изображений. –

+0

Да, я знаю это, но если не кеш-изображение один раз, то он будет загружаться из сети каждый раз, и в соответствии с вашим требованием он будет расточительно, если запрос изображения не получит 75% -ных байтов, поэтому он косвенно связан с сетевыми использованиями. –

ответ

2

Я не могу сказать о Volley и Пикассо, но я могу сказать, как UIL работы.

UIL постоянно проверяет ImageView во время обработки задачи. Если задача становится неактивной (ImageView перерабатывается (повторно используется) или собирается GC), то UIL останавливает задачу для этого ImageView.

Как насчет того, если при загрузке изображение становится неактивным? UIL отменяет загрузку, если загружено менее 75% данных изображения. Если более 75% - тогда UIL завершает загрузку (то есть UIL кэширует файл изображения в кеше диска), а затем отменяет задачу.

+0

Hi Nostra, можете ли вы опубликовать мне часть кода или имя файла, которые продолжают проверять прогресс в библиотеке. Я рассмотрю его –

+0

'IoUtils.copyStream (...)' – NOSTRA

Смежные вопросы