Ошибка доставки результата 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)

Мои вопросы:

  1. Почему мой Фрагмент отсоединяется и становится черным в фоновом режиме, пока я не уволил запущенный AcountPicker? И есть ли "взлом", чтобы избежать этого?
  2. Если нет, есть ли какой-либо способ "забрать" запущенное действие AccountPicker с новым фрагментом?

РЕДАКТИРОВАТЬ:

Нашел проблему, изменив мой начальный вопрос. Итак, вот что происходит. Мой фрагмент использует AccountPicker для продолжения работы с учетной записью пользователя. Мое приложение не может работать без выбранной учетной записи (я не выбираю учетную запись по умолчанию). Когда все приложение находится в фоновом режиме, а AccountPicker все еще работает, моя основная активность завершает свой жизненный цикл и также отключает фрагмент в пути. Однако AccountPicker - это отдельное действие на вершине стека, поэтому он не уничтожается, а просто возобновляется.

Я заставляю свою активность не уничтожать себя и фрагмент в onStop(), однако onSavedInstance() автоматически вызывается перед onStop() и мое состояние активности сохраняется. Это означает, что я больше не могу публиковать транзакции фрагмента после этого, поскольку это приведет к ошибке "Потерянное состояние".

Итак, новый вопрос: есть ли способ избежать сохранения состояния Activity перед onStop(), если мне придется ждать onActivtyResult() для фиксации транзакций фрагмента?

0 ответов

Другие вопросы по тегам