Я думаю, что хорошо думать об этих источниках как о цепочке.У вас есть 2 источника данных - ViewModel, который работает быстрее, но живет меньше, и сохраняет состояние экземпляра, которое работает медленнее, но дольше.
Правило простое - попробуйте использовать ViewModel, и если он не заполнен, используйте комплектfrom onSaveInstanceState ().
Когда вы делаете val model = ViewModelProviders.of(this).get(MyViewModel::class.java)
в onCreate (), вы можете проверить, получаете ли вы новый экземпляр viewModel.Затем, если это новый экземпляр (т. Е. Его поля данных пусты), вы можете получить некоторые базовые данные из вашего пакета, такие как идентификатор контента, и извлечь данные из серверной части или базы данных на основе этого идентификатора, заполнить им новый ViewModel изатем заполните свою активность из ViewModel (если вы используете LiveData, это будет очень естественно).
В следующий раз при вызове onCreate вы повторите процесс, либо заполнив свою деятельность из ViewModel, либо заполнив свою ViewModel, используя данные вСвязывайте и затем заполняйте вашу деятельность из вашей ViewModel.
Обновление: На самом деле, есть очень похожий подход, описанный в официальных документах .Единственное отличие состоит в том, что вы передаете пакет в ViewModel, и он решает, нужно ли ему извлекать данные, я не уточнил этот механизм.