2017-08-04 76 views
3

试图了解使用ViewModel保留活动或片段的某些状态并使用savedInstanceState包保存它们的区别。架构组件ViewModel vs. savedInstanceState包

给人的印象是,当活动/片段在配置变化的情况下被os破坏时,ViewModel实例保持活动状态,以便在os重新创建活动/片段时可以从仍然有效的ViewModel实例中获取数据。

它适用于最小化应用程序并重新打开它吗?

做了一些测试,似乎尽量减少了应用程序并重新打开了应用程序,os会在onCreate()中的stavedInstanceState包中重新创建活动/片段,而不是null(调用onSaveInstanceStae()时保存的任何内容) 。但是ViewModel已经被清除了,所以创建一个没有以前的数据的新实例。

这是否意味着虽然在这种情况下os可以检索保存的实例状态并传递给活动/片段的onCreate(),但ViewModel必须是没有先前实例数据的新实例,或者viewModel需要到一些额外的步骤来存储/恢复数据跨越实例?

+0

官方文档回答您的问题:https://developer.android.com/topic/libraries/architecture/viewmodel.html#viewmodel_vs_savedinstancestate – vlazzle

回答

4

可以找到一个很好的解释(并解决您的问题)in this blogpost。 TLDR:视图模型托管在持久片段内,并与托管活动一起重新创建。

+0

@fedpaol,感谢您的快速响应和链接,它有帮助! – lannyf