Зачем использовать фрагмент#setRetainInstance (boolean)?
Я нахожу фрагмент#setRetainInstance (true) запутанным. Вот Javadoc, извлеченный из Android Developer API:
общественная недействительным setRetainInstance (логическое сохранить)
определяет, сохраняется ли экземпляр фрагмента при повторном создании действия (например, при изменении конфигурации). Это может быть использовано только с фрагментами не в заднем стеке. Если задано, жизненный цикл фрагмента будет немного отличаться, когда активность воссоздается:
- onDestroy () не будет вызываться (но onDetach () все равно будет, потому что фрагмент отделяется от его текущей активности).
- onCreate (Bundle) не будет вызван, так как фрагмент не создается повторно.
- onAttach (Activity) и onActivityCreated(Bundle)будет еще можно назвать.
вопрос: Как вы, как разработчик, используете это и почему это делает вещи проще?
3 ответов:
как вы, как разработчик, используете это
вызов
setRetainInstance(true). Я обычно делаю это вonCreateView()илиonActivityCreated(), где я использую его.и почему это делает вещи проще?
это, как правило, проще, чем
onRetainNonConfigurationInstance()для обработки хранения данных при изменении конфигурации (например, при повороте устройства с книжной на альбомную ориентацию). Несохраненные фрагменты уничтожаются и воссоздаются при изменении конфигурации; сохраняются фрагментов нет. Следовательно, любые данные, хранящиеся в этих сохраненных фрагментах, доступны для действия после изменения конфигурации.
Это очень полезно в сохранении долго работающих ресурсов открытых, таких как сокеты. У вас есть фрагмент без пользовательского интерфейса, который содержит ссылки на разъемы bluetooth, и вам не придется беспокоиться о их повторном подключении, когда пользователь переворачивает телефон.
Это также удобно в хранении ссылок на ресурсы, которые занимают много времени для загрузки, как растровые изображения или данных сервера. Загрузите его один раз, сохраните его в сохраненном фрагменте, и когда действие будет перезагружено, оно все еще там, и вам не нужно перестраивать оно.
добавил этот ответ очень поздно, но я думал, что так будет понятнее. Скажи после меня. Когда setRetainInstance:
ложные
- фрагмент повторно создается при изменении конфигурации. Создается новый экземпляр.
- все методы жизненного цикла вызываются при изменении конфигурации, включая onCreate () и onDestroy ().
правда
- фрагмент не создается повторно при изменении конфигурации. ТОТ ЖЕ Используется экземпляр.
- все методы жизненного цикла вызываются при изменении конфигурации, кроме onCreate () и onDestroy ().
- сохранение экземпляра не будет работать при добавлении в backstack.
Не забывайте, что вышесказанное относится как к диалоговым фрагментам, так и к фрагментам.
Comments