Сайт developer.android.com/training bitmapfun

Я использую проект bitmapfun ( gridview) в своем приложении, и пока я тестировал это, я обнаружил проблему. Шаги для воспроизведения этой проблемы следующие:

  1. Откройте wifi -> запустите приложение -> скачать изображения (работает нормально).
  2. Закрыть приложение (кнопка назад), отключить Wi-Fi -> активировать сеть передачи данных -> перезапустить приложение (все еще работает нормально).
  3. Перед загрузкой всех изображений я закрываю приложение (кнопка "Назад") -> деактивировать сеть передачи данных -> активировать Wi-Fi. После этого шага, когда я перезапускаю приложение, изображения не загружаются.

В logcat я вижу, что все изображения отменяются в методе cancelPotentialWork() imageWorker, и они никогда не запускаются. Я предполагаю, что с предыдущим bitmapworkerTask(ответственным за загрузку) что-то происходит, и возникла коллизия с новой задачей. В моем приложении, когда нажата кнопка, я очищаю все кэши. Но это не является причиной проблемы, потому что я также протестировал тот же сценарий в оригинальном растровом изображении, и проблема также появилась! Как я могу решить эту проблему? Я также изменил многопоточную асинхронную задачу проекта в один поток! Есть ли какой-нибудь возможный способ очистить все ссылки на изображения и отменить все запущенные задачи?

Извините за мой английский и за то, что я не дал больше информации о природе проекта bitmapfun, но это сильно расширит мой вопрос! Спросите меня о чем угодно!

Редактировать: для того, чтобы воспроизвести проблему, возможно, лучше очищать кэш каждый раз, когда вы покидаете действие с помощью опции меню. Также не уверен, что проблема появится, если вы выполните шаги 1-3 один раз. Может быть, вы должны повторить их!

Edit2 (дополнительная справка): Когда я запускаю упражнение без проблем, logcat для первого изображения выглядит следующим образом:

04-24 02:31:56.400: D/ImageWorker(25625): doInBackground - starting work
04-24 02:31:56.400: D/ImageFetcher(25625): processBitmap - https://lh3.googleusercontent.com/--L0Km39l5J8/URquXHGcdNI/AAAAAAAAAbs/3ZrSJNrSomQ/s160-c/Antelope%252520Butte.jpg
04-24 02:31:56.400: D/ImageFetcher(25625): processBitmap, not found in http cache, downloading...

и когда я начинаю деятельность с проблемой, logcat это:

04-24 02:28:07.970: D/ImageWorker(24014): cancelPotentialWork - cancelled work for https://lh3.googleusercontent.com/--L0Km39l5J8/URquXHGcdNI/AAAAAAAAAbs/3ZrSJNrSomQ/s160-c/Antelope%252520Butte.jpg

Почему во втором случае, когда cancelPotentialWork был вызван, doInBackground никогда не запускается? В соответствии с последовательностью кода это следующая часть, которая должна быть выполнена! У кого-нибудь есть хоть какая-нибудь идея, где я должен искать ошибку?

1 ответ

С тобой все в порядке. Потому что ImageFetcher загружает изображение, когда OnCreate(), но отменить по сети деактивировать. он не содержит кода автозапуска. Поэтому, если вы хотите, чтобы автозагрузка перезагружалась, добавьте код, чтобы обнаружить изменение состояния сети. Я не думаю, что это чувствительно. Просто дайте пользователю перезапустить его, щелкнув по кнопке "Обновить" и т. Д.

Другие вопросы по тегам