Yon*_*Nir 12 android persistence android-activity android-mvvm android-viewmodel
阅读本文后,我得到了一些关于ViewModels的问题:
https://developer.android.com/topic/libraries/architecture/saving-states
它在这里说你应该结合使用a来ViewModel进行配置更改(比如屏幕旋转),并使用onSaveInstanceState()所有其他情况来销毁活动,然后重新创建以保存UI状态.
我的问题是我们如何知道onCreate(Bundle)调用时恢复状态的方法- 我应该使用ViewModel还是应该使用收到的包作为参数?当配置发生变化时,onSaveInstanceState()也会调用,显然onCreate()总是被调用.
如果我只从ViewModel恢复状态,它将不会始终保留正确的数据(因为活动可能由于配置更改之外的其他原因而被破坏).如果我只使用我保存的包onSaveInstanceState()那么为什么我会用a ViewModel开头?
我认为将这些资源视为一个链条是很好的。您有2个数据源-ViewModel,该数据源速度更快,但寿命较短,保存的实例状态较慢,但寿命较长。
规则很简单-尝试使用ViewModel,如果未填充ViewModel,请使用onSaveInstanceState()中的捆绑软件。
val model = ViewModelProviders.of(this).get(MyViewModel::class.java)在onCreate()中执行操作时,您可以检查是否获得了viewModel的新实例。然后,如果它是一个新实例(即,数据字段为空),则可以从包中获取一些基本数据,例如内容ID,并根据该ID从后端或数据库中获取数据,并用它填充新的ViewModel并然后从ViewModel填充您的活动(如果您使用的是LiveData,那将非常自然)。
下次调用onCreate时,您将重复该过程,或者从ViewModel填充活动,或者使用Bundle中的数据填充ViewModel,然后从ViewModel填充您的活动。
更新:实际上,官方文档中描述了非常相似的方法。唯一的区别是,您将捆绑包传递给ViewModel,它决定是否需要获取数据,我对此机制并不具体。
| 归档时间: |
|
| 查看次数: |
1341 次 |
| 最近记录: |