ViewModel如何在配置更改时保留

时间:2018-01-08 07:46:24

标签: java android android-viewmodel android-architecture-components

查看ViewModel文档,它说:

  

换句话说,这意味着如果ViewModel不会被销毁   其所有者因配置更改(例如轮换)而被销毁。该   所有者的新实例将重新连接到现有的   视图模型。

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

2 个答案:

答案 0 :(得分:5)

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

请参阅Google IO 2017中的retained fragment演讲,其中Yigit Boyar谈论ViewModel

答案 1 :(得分:2)

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