2013-04-19 1 views
6

Я использую проект bitmapfun () в своем приложении, и пока я тестировал это, я нашел проблему. Действия по воспроизведению этой проблемы следующие:developer.android.com/training bitmapfun project

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

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

Извините за мой английский и за то, что вы не дали больше информации о природе проекта 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 никогда не запускается? Согласно последовательности кода, это следующая часть, которая должна быть выполнена! Имеет ли кто-нибудь хоть какую-нибудь идею, где я должен искать ошибку?

+0

Я не могу понять, в чем проблема. Для каждой новой битманордатуры я добавляю ее в список, и когда я выхожу из действия, я отменяю все задачи в этом чтобы убедиться, что никакая ожидающая задача не влияет на активность при ее повторном запуске. Также для каждого asyncDrawable я изменяю bitmapWorkerTaskReference на null, чтобы быть уверенным, что у него нет никакой ссылки на bitmapWorkerTask, которая не была собрана мусором. Моя цель - имитировать условия, когда деятельность начинается, и все работает нормально. Но после всего этого проблема все еще существует! – user2065529

ответ

2

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

+0

, если это была проблема дезактивации сети, такая же проблема возникла бы в случае, когда я деактивирую Wi-Fi, и после этого я ее снова активирую. Но в этом случае этого не происходит.Я предполагаю, что при появлении проблемы вызывается cancelPotentialWork и возвращает false. Это означает, что изображение имеет ссылку на задачу из предыдущего раздела. Как я могу очистить все предыдущие ссылки? Удалось ли вам воссоздать проблему? – user2065529