Я загружаю растровые изображения из Интернета, используя BitmapFactory.decodeStream()
внутри AsyncTask. В моем приложении у меня есть просмотр списка изображений, и я хочу только загрузить растровые изображения, которые пользователь может видеть и отменить все запросы на скачивание для растровых изображений, которые пользователь прокрутил. После завершения загрузки я кэширую растровое изображение, поэтому мне не нужно его снова загружать. Чтобы отменить загрузки растровых изображений, я звоню AsyncTask.cancel(true)
.Определите, удалось ли BitmapFactory.decodeStream() без ошибок
Проблема в том, что иногда BitmapFactory.decodeStream()
выводит предупреждение о том, что произошло событие InterruptedIOException (поскольку я отменил задачу во время ее загрузки), но на самом деле это не приведет к исключению. Обычно, когда это происходит, функция возвращается с полунагруженным растровым изображением. К сожалению, поскольку возвращенный битмап не является нулевым, приложение просто предполагает, что загрузка прошла успешно и кэширует эту половину загруженного растрового изображения. С этого момента пользователь будет зацикливаться на полузагруженном растровом изображении до тех пор, пока кеш не будет очищен.
Итак, мой вопрос в том, есть ли способ проверить, действительно ли BitmapFactory.decodeStream()
удалось загрузить растровое изображение?
У меня возникла аналогичная проблема, кроме как в моем случае после того, как она регистрирует предупреждение в файле журнала, оно SIGINT меняет приложение и сильно его сбивает. У меня есть блок try/catch, который должен поймать исключение (он не возвращается на мой уровень). decodeStream() никогда не возвращается в моем случае ... приложение просто умирает. Это должно быть неправильное обращение прерывания задачи в библиотечном коде, поэтому я не вижу ничего, что можно было бы сделать по этому поводу. Я должен использовать «cancel (false)» и переносить вычислительную задержку для декодирования потока (операция загрузки сети) для завершения. – TechnalyticSteve