10

查看ViewModel文档,它说:

换句话说,这意味着如果 ViewModel 的所有者因配置更改(例如旋转)而被销毁,则不会销毁 ViewModel。所有者的新实例将重新连接到现有的 ViewModel。

如果引用它的活动被破坏,ViewModel 是如何不被破坏的?一旦我们创建了一个新的活动,它是如何重新连接的?

4

2 回答 2

5

在幕后使用了保留的片段。保留的片段在Activity重新创建时(例如从配置更改)保留其状态。

请参阅来自 Google IO 2017 的“架构组件介绍”演讲,Yigit Boyar 在其中谈到ViewModel.

于 2018-01-08T08:33:48.967 回答
3

答案是如果您使用 ViewModelProviders.of(this).get(YourViewModel.class) 创建 ViewModel,该库将为您缓存 ViewModel。如果您使用“new YourViewModel()”创建 ViewModel,则 ViewModel 将在每次活动配置更改时重新创建。在 ViewModelProviders 中,它会创建一个 HolderFragment 来添加到您的 Activity 或 Fragment,它是不可见的,当配置更改时,Activity 被销毁,但缓存仍然存在,因此下次创建 Activity 时,ViewModel 将重新连接到它。

于 2018-01-08T08:53:49.793 回答