Android: окно утечки на финише - PullRequest
1 голос
/ 19 октября 2010

Я прочитал другие сообщения об утечке окна и попробовал то, что там предлагалось, безрезультатно.

У меня есть 3 действия: A, B и C. Задание A собирает информацию от пользователя. Действие B отображает вращающийся ProgressDialog, когда он взаимодействует с сервером в другом потоке. Когда поток завершается, он отклоняет ProgressDialog и запускает следующее действие. Деятельность C отображает информацию с сервера для пользователя. Упражнение B настроено так, что когда пользователь возвращается к C, он возвращается к A.

Важно, чтобы эти задачи были в отдельных видах деятельности.

На данный момент приложение успешно выполняет то, что должно, в большинстве случаев, за исключением следующего сценария: если пользователь изменяет ориентацию в процессе действия C, прежде чем вернуться к действию A, приложение вылетает из-за утечки окна.

  • Я закрываю ProgressDialog в onPause () действия B перед запуском C.
  • Я пытался отклонить ProgressDialog в основном потоке используя обработчик, а также в отдельная тема.
  • Когда пользователь не меняет ориентация в C, нет утечки окна происходит.

Есть идеи? ТИА

Ответы [ 3 ]

0 голосов
/ 22 октября 2010

Я решил свою проблему, полностью изменив то, как я справился со всем.Теперь у меня есть только два действия (A и B), и я отображаю ProgessDialog в действии B, обрабатывая сохраненный InstanceState по мере необходимости, чтобы обойти проблему.

Несмотря на то, что я исправил проблему в своем приложении, ядо сих пор не знаю, почему это происходило раньше, и хотел бы узнать больше об утечках окон и почему у меня возникли проблемы.Если кто-то знает больше о проблеме, с которой я столкнулся, пожалуйста, напишите, я уверен, что есть другие с такой же проблемой.

Спасибо

0 голосов
/ 28 сентября 2011

Не уверен, было ли это связано с вашей конкретной проблемой, но у меня была похожая проблема, связанная с неплотными окнами для диалогов, которые создаются в методе onCreate действия. Таким образом, если ваша деятельность начинает показывать диалог, и вы делаете изменение конфигурации, ОС запоминает, какие диалоги были показаны, поэтому, когда действие прекращается и перезапускается, ОС пытается восстановить ваш старый диалог, в то время как ваша активность пытается показать то же самое. снова диалог (так как он в onCreate). Я обнаружил, что, только показывая диалоговое окно во время onCreate, если это не изменение конфигурации (т. Е. SaveInstanceState! = Null), проблема утечки окна исчезла.

0 голосов
/ 19 октября 2010

Это часто случается, когда используются ProgressDialogs.Я экспериментировал с ProgressDialog некоторое время назад и обнаружил, что нужно сделать, это закрыть () его из onPause () и создать его заново из onResume ().Очевидно, что фоновая задача должна сохраняться в вашем Activity и диалоге, поэтому я использовал onRetainNonConfigurationInstance () для передачи экземпляра задачи из разрушенного Activity в новый.

Альтернативный, более обходной обходной путь может состоять в том, чтобы просто запретить вашей Activityбыть уничтоженным и созданным заново только потому, что изменилась ориентация экрана.Сделайте это, добавив android: configChanges = "direction" к тегам в вашем AndroidManifest.xml.

...