2014-11-26 2 views
3

Я загружаю растровые изображения из Интернета, используя BitmapFactory.decodeStream() внутри AsyncTask. В моем приложении у меня есть просмотр списка изображений, и я хочу только загрузить растровые изображения, которые пользователь может видеть и отменить все запросы на скачивание для растровых изображений, которые пользователь прокрутил. После завершения загрузки я кэширую растровое изображение, поэтому мне не нужно его снова загружать. Чтобы отменить загрузки растровых изображений, я звоню AsyncTask.cancel(true).Определите, удалось ли BitmapFactory.decodeStream() без ошибок

Проблема в том, что иногда BitmapFactory.decodeStream() выводит предупреждение о том, что произошло событие InterruptedIOException (поскольку я отменил задачу во время ее загрузки), но на самом деле это не приведет к исключению. Обычно, когда это происходит, функция возвращается с полунагруженным растровым изображением. К сожалению, поскольку возвращенный битмап не является нулевым, приложение просто предполагает, что загрузка прошла успешно и кэширует эту половину загруженного растрового изображения. С этого момента пользователь будет зацикливаться на полузагруженном растровом изображении до тех пор, пока кеш не будет очищен.

Итак, мой вопрос в том, есть ли способ проверить, действительно ли BitmapFactory.decodeStream() удалось загрузить растровое изображение?

+0

У меня возникла аналогичная проблема, кроме как в моем случае после того, как она регистрирует предупреждение в файле журнала, оно SIGINT меняет приложение и сильно его сбивает. У меня есть блок try/catch, который должен поймать исключение (он не возвращается на мой уровень). decodeStream() никогда не возвращается в моем случае ... приложение просто умирает. Это должно быть неправильное обращение прерывания задачи в библиотечном коде, поэтому я не вижу ничего, что можно было бы сделать по этому поводу. Я должен использовать «cancel (false)» и переносить вычислительную задержку для декодирования потока (операция загрузки сети) для завершения. – TechnalyticSteve

ответ

0

Несмотря на то, что я не смог выяснить, удалось ли выполнить BitmapFactory.decodeStream() без ошибок, я нашел обходное решение. Я просто проверяю, была ли задача отменена перед вызовом BitmapFactory.decodeStream() и после вызова BitmapFactory.decodeStream(), чтобы определить, была ли задача отменена во время вызова BitmapFactory.decodeStream(). Если это так, я просто предполагаю, что BitmapFactory.decodeStream() не удалось (что, вероятно, имеет), и выполнить необходимый очищающий код, чтобы гарантировать, что битмап никогда не попадает в кеш.

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