2015-02-04 3 views
6

Я использую UIL (от Nosotra), чтобы загрузить изображения, которые отображает сервер, и для создания каждого изображения сервер занимает до 50 секунд. Таймаут сервера установлен на 15 секунд, поэтому мы создали механизм опроса, который реализован в методе ImageDownloader.getStream(). После загрузки изображений отображается в ViewPager (android.support.v4.view.ViewPager, так же, как sample делает.)Использование Android-UIL, как остановить загрузку?

Когда пользователи переходят на другие страницы, я хочу, чтобы остановить опрос без загрузки файлов, но, кажется, нет "хорошего «способ разорвать поток загрузки.

GetStream Псевдо-код

1. Parse custom-style URI ("asdf://mypng|123455678945643563245"); 
2. Make a real world URL from it. 
3. Poll the server for the image url (causes the server to render - could take up to 1m30s). 
4. Get the stream from the URL, return the stream to caller. 
     Example Code: InputStream is = (InputStream) url.getContent(); 

Что пытался до сих пор

Возвращаясь null из моего getStream метода вызывает NullPointerException быть выброшен, так это в основном так же, как просто бросали исключение.

Когда исключение, то изображение не останавливается, но:

  1. Несколько изображений позже, я получаю OutOfMemoryError, поэтому я показываю ошибку на экране. Я не должен получать ошибку. Я уже пробовал this SO question's checklist, но ничего не получилось. Это OOM Stacktrace: OutOfMemoryError stacktrace nostra uil
  2. Загрузка прекращается, и если средство просмотра не будет перерабатывать представление, то при возврате на эту страницу я все равно увижу эту страницу с ошибкой (без повторной попытки).

Я желаю

Я желаю для меня, чтобы иметь метод «ждать», что бы добавить остановить текущую загрузку и повторно добавить новую задачу в конец очереди (в настоящее время на съемочной площадке на QueueProcessingType.LIFO, и я хочу, чтобы он загрузил повторно после после текущих страниц, и любые новые страницы, которые пользователь хочет, должны иметь приоритет над повторно добавленными).

Я также согласился бы избежать OutOfMemoryError.

Пожалуйста, помогите.

+1

См. Также [этот номер] (https://github.com/nostra13/Android-Universal-Image-Loader/issues/903) в проекте GitHub. – Felix

+0

Уверены ли вы, что ваше приложение не имеет утечек памяти? – NOSTRA

+0

До сих пор мы ничего не заметили, , и проблема воспроизводится только при использовании просмотренных страниц. – Felix

ответ

1

Проблема может быть здесь 4. Загрузите изображение, верните поток. Загрузка - это главная особенность UIL. Просто верните NetworkStream здесь. Также у меня был OOM на UIL с большими изображениями и включен MemoryCache. Также, какой размер изображения у вас есть на сервере. в режиме загрузки. У вас есть контроль над размером. Также полезно UIL GitHub, пожалуйста, прочитайте абзацы 3 и 4.

+0

Извините, я, наверное, вас отпустил, поэтому я лучше отредактировал псевдокод. Я читал p3 и p4 в этом github - OOM менее важен, я думал, что это побочный эффект отбрасывания исключения mid-getStream(). – Felix

+2

Раньше я загружал изображения из AWS Elastic Transcoder, поэтому поведение, подобное вашему. Я возвращал null из getStream. Он все еще работает. Он просто предупреждал журналы UIL. Также вы можете использовать java doc для этого метода https://github.com/nostra13/Android-Universal-Image-Loader/blob/master/library/src/main/java/com/nostra13/universalimageloader/core/download/ImageDownloader .java throws IOException, если возникает некоторая ошибка ввода-вывода во время получения потока изображения throws UnsupportedOperationException, если URI изображения имеет неподдерживаемую схему (протокол) – TAC

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