2010-10-19 3 views
1

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

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

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

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

  • Я отклоняя ProgressDialog InThe OnPause() деятельности В перед ISTART С.
  • Я попытался отклоняя ProgressDialog на главном потоке с помощью обработчика, а также в отдельном потоке.
  • Когда пользователь не меняет ориентацию в C, не возникает утечка окна .

Любые идеи? TIA

+1

Можете ли вы предоставить более подробную информацию об аварии?Каков точный вывод logcat? – EboMike

+0

Я бы, если не исправить проблему. Поэтому я не могу дать зачитывать. Хотел бы я, хотя бы потому, что я все еще не знаю, что пошло не так. – mtmurdock

ответ

0

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

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

+0

, возможно, вы не прочитали вопрос выше. Я уже вызываю функцию увольнения() в onPause(), так что это не проблема. Я бы не хотел воссоздавать диалог в onResume(), потому что, когда я возвращаюсь к Activity B из Activity C, я немедленно закрываю его, вызывая finish() в onActivityResult(). пользователь не должен видеть активность B вообще при возврате из Activity C. они должны просто перейти к A. Утечка окна возникает, когда приложение возвращается к Activity A. – mtmurdock

+0

Как вы думаете, что произойдет, если экран переориентирован, а Activity B текущий и до того, как будет показана активность C? –

+0

Это не то, что я прошу. Ошибка возникает, когда ориентация изменяется в Activity C. Прочтите вопрос. – mtmurdock

0

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

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

Благодаря

0

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

Смежные вопросы