Я некоторое время программировал для Android и все еще ищу решения для сохранения данных при изменении конфигурации. Помимо сохранения Parcelable
s в Activity Bundle
в документах onSaveInstanceState
предлагается использовать Fragment
с флагом setRetainInstance
, установленным в true.
Но я только что наткнулся на код, который использует onRetainCustomNonConfigurationInstance
для хранения произвольных объектов (причудливым образом, но по существу больших объектов без ссылок на Activity
и т. д.). Я никогда не видел, чтобы этот метод использовался, поэтому у меня есть некоторые сомнения:
- Безопасно ли вызывать этот метод для хранения произвольных объектов (в том смысле, что я могу быть уверен, что он будет вызван и что он не будет объявлен устаревшим/удален в ближайшее время)?
- Чем этот метод отличается от
onRetainNonConfigurationInstance()
, который тоже должен возвращатьObject
и по сути должен работать аналогично? - Почему по какой-то причине лучше использовать сохраненный фрагмент?
В качестве бонуса я был бы признателен за любые другие советы или решения, чтобы сохранить состояние объектов, таких как AsyncTask
, Observable
, презентаторов просмотра и продолжить
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
для своегоActivities
. Взято с сайта developers.google.com/admob/android/quick-start. Предположительно, это не лучшее решение, но оно работает лучше, чем все, что я видел. - person Jared Burrows   schedule 29.06.2015onConfigurationChanged()
, чтобы покрыть случаи, когдаconfigChanges
блокирует нормальный цикл уничтожения/воссоздания активности. - person CommonsWare   schedule 15.07.2015onRetainNonConfigurationInstance()
являетсяfinal
и не может быть переопределен, чтобы гарантировать, чтоFragmentActivity
сможет выполнять работу по изменению конфигурации со своими фрагментами.onRetainCustomNonConfigurationInstance()
— это замещающий хук для участия в этом на уровне активности. Почему по какой-то причине лучше использовать сохраненный фрагмент? -- он работает в местах, отличных отFragmentActivity
. - person CommonsWare   schedule 15.07.2015