Android - проблемы с многоуровневой цепочкой действий

(Обратите внимание, что я искал в Интернете предупреждения, которые описываю ниже, и почти ничего не нашел о них. )

Я работаю с API уровня 10. У меня есть экран предпочтений (на основе XML), и одна из имеющихся там опций создает настраиваемый ListActivity следующим образом:

  • PreferenceActivity содержит опцию, которая создает a ...
    • ListActivity , который представляет собой диалог, который использует ...
      • setOnClickListener () , который содержит метод onClick (), который ( прямо перед вызовом finish () ) запустит startActivity () новое Intent ...
        • sub-Activity , которое запускает ...
          • AsyncTask , который выполняет переменную временную работу, которая по завершении вызывает ...
          • onPostExecute () , который вызывает finish ()

Дело в том, что это работает ... но я получаю массу предупреждений, начиная с:

10-16 21:59:25.010: WARN/WindowManager(170): Rebuild removed 4 windows but added 3
10-16 21:59:25.010: WARN/WindowManager(170): This window was lost:.....

Любопытно, что этот набор предупреждений появляется ТОЛЬКО, когда задача выполняется быстро! Когда я добавил вызов Thread.sleep () к моей AsyncTask, чтобы искусственно увеличить время его выполнения, он работал и не выдавал никаких предупреждений. Фактически, если для запуска требуется более (примерно) 500 мс, он работает нормально. (Обратите внимание, что я попытался использовать startActivityForResult () без особого эффекта - возникает та же проблема.)


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

Я держу пари, что это состояние гонки ... порядок, в котором окна уничтожаются, зависит от времени выполнения ... и у меня создается впечатление, что когда дочерняя активность закрывается до ее родительской ListActivity, появляются предупреждения быть брошенным. Но добавление 1s sleep () не является разумным решением, если это не какая-то ошибка Android (маловероятно, но опять же, я уже воспроизвел пару из них сегодня).

Итак, в чем заключается недостаток в этом моем сообщении, которое приводит к потоку предупреждений? Было бы неплохо сказать «по желанию, сделайте это, затем сделайте то, затем закончите», но я думаю, что я делать то же самое. Может быть, нет ... мысли?


Edit: Я решил попробовать сделать ListActivity как настраиваемый диалог ... это была одна из самых болезненных вещей, которые я пытался сделать в последнее время (getApplication () не работает и многие другие вещи, кажется, идут не так ... это может быть в некоторой степени неопытностью, но диалоги на самом деле не предназначены для этого ...

6
задан MartyMacGyver 17 October 2011 в 06:12
поделиться