Используя onRetainCustomNonConfigurationInstance сохранить данные по изменениям конфигурации
я программировал для Android в течение некоторого времени, и я все еще ищу решения для сохранения данных над изменениями конфигурации. Помимо спасения Parcelables для активности 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() метод. Он предназначался для хранения состояний.