Используя onRetainCustomNonConfigurationInstance сохранить данные по изменениям конфигурации
я программировал для Android в течение некоторого времени, и я все еще ищу решения для сохранения данных над изменениями конфигурации. Помимо спасения Parcelable
s для активности Bundle
на onSaveInstanceState
docs предлагают использовать Fragment
С setRetainInstance
флаг установлен в true.
но я только что наткнулся на код, который использует onRetainCustomNonConfigurationInstance
для хранения произвольных объектов (причудливым образом, но по существу больших объектов без ссылок на Activity
etc.). Я никогда не видел, чтобы этот метод использовался, поэтому я есть некоторые сомнения:
- является ли этот метод безопасным для вызова для хранения произвольных объектов (в том смысле, что я могу быть уверен, что он будет вызван, и что он не будет устарел/удален в ближайшее время)?
- чем этот метод отличается от
onRetainNonConfigurationInstance()
, который также должен возвратитьObject
, а по сути должно работать аналогично? - по какой-то причине использование сохраненного фрагмента еще лучше?
в качестве бонуса, я был бы благодарен за любой другие советы или решения для сохранения состояния объектов, как AsyncTask
, Observable
, ведущих и перейти на
1 ответов
является ли этот метод безопасным для вызова для хранения произвольных объектов (в некотором смысле что я могу быть уверен, что это будет называться, и что это не будет устарел / удален в ближайшее время)?
onRetainCustomNonConfigurationInstance()
является относительно новым методом, и он не устарел. Я бы действительно предположил, что он не исчезнет в ближайшее время, потому что нет причин вводить что-то новое только для его удаления. Вы можете использовать его безопасно.
как этот способ отличается от onRetainNonConfigurationInstance(), который также должен возвращать объект, и по сути должен работать аналогично?
onRetainNonConfigurationInstance()
всегда возвращайте экземпляр inner NonConfigurationInstances
класс с сохраненными фрагментами, загрузчиками и т. д. состояниями. Вы не можете (и не должны) изменить это поведение системы. Вот почему метод final
и вы не можете переопределить его.
если вы хотите сохранить свой пользовательский экземпляр, вам нужно переопределить onRetainCustomNonConfigurationInstance()
и вернуть его оттуда.
в самом деле onRetainNonConfigurationInstance()
звонки onRetainCustomNonConfigurationInstance()
и сохраняет перенастроенный экземпляр с другими состояниями, такими как сохраненные фрагменты и загрузчики.
по какой-то причине использование сохраненного фрагмента еще лучше?
это скорее вопрос вашего варианта использования и предпочтений. Логика может быть такой. Если ваша деятельность просто контролирует фрагменты и не имеет другой специальной логики, то проще использовать сохраненные фрагменты. Если ваша деятельность имеет что-то чтобы сохранить, то вы можете безопасно использовать onRetainCustomNonConfigurationInstance()
метод. На данный момент в обоих случаях государство все еще сохраняется старым добрым и устаревшим onRetainNonConfigurationInstance()
метод.
p.s. Что касается Бонусного вопроса о сохранении состояния, я бы предложил посмотреть на данные метода onsaveinstance() метод. Он предназначался для хранения состояний.