Как обрабатывать AsyncTask onPostExecute, когда он приостановлен, чтобы избежать IllegalStateException

Я ценю многочисленные сообщения об AsyncTask об изменении ротации. У меня возникает следующая проблема при использовании библиотеки совместимости и попытке отклонить DialogFragment в onPostExecute .

У меня есть фрагмент, который запускает AsyncTask, который отображает прогресс DialogFragment , затем в onPostExecute закрывает диалоговое окно, а затем потенциально вызывает другой DialogFragment .

Если при отображении диалогового окна прогресса я помещаю приложение в фоновый режим, я получаю следующее для своего фрагмента:

1) onPause

2) onSaveInstanceState

3) onPostExecute , в котором я пытаюсь закрыть и вызвать диалоговое окно.

Я получаю IllegalStateException , потому что я пытаюсь эффективно зафиксировать транзакцию, когда операция сохранила свое состояние, и я это понимаю.

При ротации я предположил (возможно, ошибочно), что не получу onPostExecute , пока действие не будет воссоздано. Однако, переводя приложение в фоновый режим, я предположил (определенно неправильно), что onPostExectute не будет вызываться, пока фрагмент / действие были приостановлены.

Мой вопрос: могу ли я просто обнаружить в onPostExecute , что фрагмент / действие приостановлено, и просто выполнить то, что мне нужно сделать в onResume вместо этого? Мне это кажется несколько некрасивым.

Заранее спасибо, Питер.

Редактировать 1

Требуется поддержка версии 2.1 и выше

Редактировать 2

Я рассмотрел возможность отображения диалогового окна с использованием FragmentTransaction: add и FragmentTransaction: commitAllowingStateLoss , однако это не без проблем.

37
задан Jeff Axelrod 7 August 2012 в 14:53
поделиться