Я использую проект bitmapfun (gridview) в своем приложении, и пока я тестировал это, я нашел проблему. Действия по воспроизведению этой проблемы следующие:developer.android.com/training bitmapfun project
- Открыть wifi -> приложение для запуска -> скачать изображения (он отлично работает).
- Закрыть приложение (кнопка «Назад»), отключить Wi-Fi -> активировать сеть передачи данных -> перезапустить приложение (все работает отлично).
- Перед тем, как все изображения были загружены, я закрою приложение (кнопка «Назад») -> отключите сеть передачи данных -> активируйте Wi-Fi. После этого шага, когда я перезапускаю приложение, изображения не загружаются.
В logcat я вижу, что все изображения отменяются в imageWorker's cancelPotentialWork(), и они никогда не запускаются. Я предполагаю, что что-то происходит с предыдущим bitmapworkerTask (отвечает за загрузку), и есть столкновение с новой задачей. В моем приложении, когда нажата кнопка backbutton, я очищаю все кеши. Но это не причина проблемы, потому что я также тестировал один и тот же сценарий в исходном bitmapfun, и проблема также появилась! Как я могу исправить эту проблему? Я также изменил многопоточность asynctask проекта в один поток! Есть ли способ очистить все ссылки на изображение и отменить все запущенные задачи?
Извините за мой английский и за то, что вы не дали больше информации о природе проекта 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 никогда не запускается? Согласно последовательности кода, это следующая часть, которая должна быть выполнена! Имеет ли кто-нибудь хоть какую-нибудь идею, где я должен искать ошибку?
Я не могу понять, в чем проблема. Для каждой новой битманордатуры я добавляю ее в список, и когда я выхожу из действия, я отменяю все задачи в этом чтобы убедиться, что никакая ожидающая задача не влияет на активность при ее повторном запуске. Также для каждого asyncDrawable я изменяю bitmapWorkerTaskReference на null, чтобы быть уверенным, что у него нет никакой ссылки на bitmapWorkerTask, которая не была собрана мусором. Моя цель - имитировать условия, когда деятельность начинается, и все работает нормально. Но после всего этого проблема все еще существует! – user2065529