В моем приложении есть фрагмент с кнопкой, которая просит пользователя выбрать учетную запись, используя собственный 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 с новым фрагментом?
EDIT:
Нашел проблему, изменив мой начальный вопрос. Итак, вот что происходит. Мой фрагмент использует AccountPicker для продолжения работы с учетной записью пользователя. Мое приложение не может работать без выбранной учетной записи (я не выбираю учетную запись по умолчанию). Когда все приложение находится в фоновом режиме, а AccountPicker все еще работает, моя основная активность завершает свой жизненный цикл и также отключает фрагмент в пути. Однако AccountPicker - это отдельное действие на вершине стека, поэтому оно не уничтожается, а просто возобновляется.
Я заставляю свою Активность не уничтожать себя и Фрагмент в onStop (), однако onSavedInstance () автоматически вызывается перед onStop (), и мое состояние Деятельности сохраняется. Это означает, что я больше не могу публиковать транзакции фрагмента после этого, поскольку это приведет к ошибке «Потерянное состояние».
Итак, новый вопрос: Есть ли способ избежать сохранения состояния Activity перед onStop (), если мне придется ждать onActivtyResult () для фиксации транзакций фрагмента?