У меня проблема с жизненным циклом фрагмента, и мне нужно разрешение, чтобы выйти из него - PullRequest
0 голосов
/ 31 августа 2018

Я провел достаточно исследований по этому вопросу, и нет единого четкого решения этой проблемы.

В жизненном цикле, особенно в жизненном цикле фрагмента, следующее исключение наступает в любой момент после onPause ().

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState

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

Я хочу уточнить, что происходит, и какое должно быть реальное решение, чтобы справиться с этим.

Мне нужно знать плюсы и минусы этого механизма; его значение в жизненном цикле фрагмента или действия.

Кроме того, если я изменю функцию Windows в onCreate, чтобы она не переходила в спящий режим, если только пользователь вручную не нажал кнопку «Домой», активность все равно перейдет в это состояние?

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Более подробное объяснение представлено в новой справочной документации для разработчиков Android и руководствах по использованию JetPack Life Cycle Listener.

https://developer.android.com/topic/libraries/architecture/lifecycle#kotlin

Библиотека информирует компоненты жизненного цикла действия. Это означает, что вам не требуется абстрактный класс baseActivity, который переопределяет каждый обратный вызов жизненного цикла, и записывает это состояние в логическую переменную. Слушатель LifeCycle сделает это за вас.

Все, что вам нужно сделать, это прекратить ввод нового фрагмента или остановить любой загрузчик, который обновляет интерфейс, когда возвращается его ответ. Самое подходящее время для этого - до вызова состояния onStop или onSavedInstance, и ваши компоненты будут проинформированы об этом.

В нем четко указано, что после вызова onSavedInstancState или onStop пользовательский интерфейс становится неизменным до тех пор, пока onStart из Activity не будет вызван снова. Иногда вам нужно вызвать restart одного и того же действия, используя флаги NEW TASK и CLEAR TASK, используя намерение, когда это состояние возникает, и нет никакой вероятности, что в противном случае будет вызван onStart.

Счастливое кодирование: -)

0 голосов
/ 31 августа 2018

Это исключение возникает, когда вы пытаетесь добавить / удалить / заменить / взаимодействовать любым другим способом с Fragment внутри Activity, когда оно приостановлено.

Это означает, что Activity не сможет восстановить свое состояние (восстановить состояние фрагмента, который был изменен), если он будет немедленно уничтожен.

Лучшее решение здесь - проверить, что активность НЕ приостановлена ​​ во время взаимодействия с фрагментом. Другой вариант - использовать commitAllowingStateLoss() для взаимодействия с транзакцией фрагмента с риском потери ее состояния.

См: https://developer.android.com/reference/android/app/FragmentTransaction.html#commitAllowingStateLoss()

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...