Ошибка доставки результата ResultInfo: Неверное состояние
В моем приложении у меня есть фрагмент с кнопкой, которая просит пользователя выбрать учетную запись, используя собственный Android AccountPicker.
Вот как я это делаю:
Intent intent = AccountPicker.newChooseAccountIntent(null, null,
new String[] {"com.google", "com.google.android.legacyimap"},
false, null, null, null, null);
startActivityForResult(intent, PICK_ACCOUNT);
Проблема заключается в том, что если пользователь создает фон для всего приложения, пока диалоговое окно AccountPicker все еще отображается, Fragment отсоединяется и снова начинает свой жизненный цикл, но диалоговое окно AccountPicker все еще там.
В результате на черном фоне появляется диалоговое окно AccountPicker, и выполнение AccountPicker ничего не делает. После того, как он уволен, Фрагмент воссоздается, поэтому пользователь должен снова пройти через AccountPicker.
В моем фрагменте onCreate() я использую
setRetainInstance(true)
Мои вопросы:
- Почему мой Фрагмент отсоединяется и становится черным в фоновом режиме, пока я не уволил запущенный AcountPicker? И есть ли "взлом", чтобы избежать этого?
- Если нет, есть ли какой-либо способ "забрать" запущенное действие AccountPicker с новым фрагментом?
РЕДАКТИРОВАТЬ:
Нашел проблему, изменив мой начальный вопрос. Итак, вот что происходит. Мой фрагмент использует AccountPicker для продолжения работы с учетной записью пользователя. Мое приложение не может работать без выбранной учетной записи (я не выбираю учетную запись по умолчанию). Когда все приложение находится в фоновом режиме, а AccountPicker все еще работает, моя основная активность завершает свой жизненный цикл и также отключает фрагмент в пути. Однако AccountPicker - это отдельное действие на вершине стека, поэтому он не уничтожается, а просто возобновляется.
Я заставляю свою активность не уничтожать себя и фрагмент в onStop(), однако onSavedInstance() автоматически вызывается перед onStop() и мое состояние активности сохраняется. Это означает, что я больше не могу публиковать транзакции фрагмента после этого, поскольку это приведет к ошибке "Потерянное состояние".
Итак, новый вопрос: есть ли способ избежать сохранения состояния Activity перед onStop(), если мне придется ждать onActivtyResult() для фиксации транзакций фрагмента?