С новыми архитектурными компонентами Android имеет ли значение savedInstanceState?


Читать про андроид новая архитектура компонентов, рекомендуется использовать различные модели представления экземпляров, чтобы поток данных в деятельности и фрагментов.

Существует также такое понятие движущих данных из одной постоянной модели :

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

И аналогичное понятие единого источника истины :

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

В примерах кода, которые я видел, они передают пакет savedInstanceState до реализации суперкласса, например:

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    String userId = getArguments().getString(UID_KEY);
    viewModel = ViewModelProviders.of(this).get(UserProfileViewModel.class);
    viewModel.init(userId);
}

Но, похоже, больше нет причин для наших действий явно хранить / извлекать важные значения для / Из savedInstanceState.

Не имеет ли savedInstanceState отношения к новой архитектуре?

1 3

1 ответ:

Похоже, что больше нет причин для наших действий явно хранить / извлекать важные значения в / из savedInstanceState.

Это будет полностью зависеть от того, что находится в деятельности.

Не имеет ли savedInstanceState отношения к новой архитектуре?

Нет.

Идея, лежащая в основе сохраненного состояния экземпляра, была и продолжает быть, помогая действию притворяться, что оно было вокруг все время, даже хотя деятельность была уничтожена и воссоздана по пути, либо из-за:

  • изменение конфигурации (например, поворот экрана) или
  • завершение процесса (например, пользователь покидает приложение, Android завершает процесс, и пользователь возвращается в приложение в течение получаса)
Так, например, предположим, что у нас есть действие с формой. Когда пользователь заполняет форму и нажимает кнопку "Сохранить", мы хотим сохранить содержимое формы. И, в некоторых случаях, мы открываем форму на некоторых существующих данных, которые уже сохраняются, и поэтому мы хотим загрузить их. Это проблемы, с которыми компоненты архитектуры Android, в частности Room, призваны помочь. Но предположим, что пользователь заполняет поле в форме, а затем поворачивает экран. В этом случае, скорее всего, мы еще не хотим сохранять изменения в базе данных, потому что пользователь не нажал кнопку "СОХРАНИТЬ", чтобы выразить заинтересованность в сохранении этого изменения. Итак, мы полагаемся на onSaveInstanceState(), чтобы справиться с этим для нас. В этом случае встроенный onSaveInstanceState() обрабатывает это, поскольку содержимое EditText является очевидным изменяемым пользователем состоянием. Но, предположим, кроме того, после редактирования поля пользователь нажимает на ImageButton, Чтобы выбрать контакт. Это использует ACTION_PICK для вызова средства выбора контактов, и пользователь выбирает контакт там. Управление возвращается к исходному действию, которое, возможно, имеет TextView, чтобы показать имя контакта, или, возможно, обновляет ImageButton с аватаром контактов. Теперь пользователь поворачивает экран. Еще раз повторю, что мы, возможно, не захотим настаивать на этом. Однако на этот раз активность не собирается автоматически удерживать Uri нашего контакта, поскольку она не знает, как это сделать. Итак, мы помещаем это в состояние сохраненного экземпляра Bundle сами, переопределяя onSaveInstanceState().

Хранилища данных (например, базы данных) представляют собой единый "источник истины", но именно прикладная логика решает , когда данные становятся "истиной" , а состояние экземпляра является общим подход к обработке данных, которые могут стать истиной в будущем, но еще не являются истиной.