Android ViewModel在其主机活动不在活动堆栈顶部且设备已旋转时重新创建

Pab*_*des 6 android android-mvvm android-architecture-components

我在以下场景中:

我有一个包含ViewModel的OnboardActivity,我可以多次旋转这个OnboardActivity,并且ViewModel可以在没有问题的情况下保持配置更改.但是,如果我使用startActivityForResult(...)在此(OnboardActivity)之上启动另一个Activity(FirebaseAuthActivity),然后在FirebaseAuthActivity中我旋转设备并按后退按钮.当OnboardActivity被带到堆栈顶部时,它会再次重新创建ViewModel实例.

这是ViewModel在架构组件中的正常行为吗?

有没有办法告诉OnboardActivity从堆栈弹出时屏幕方向与保存的屏幕方向不同?

and*_*dev 1

我在使用 ViewModel 时注意到同样的问题并做了一些研究,情况如下:

  • 1)打开ActivityA -获取ViewModel,参考:TestViewModel@e71fab8
  • 2)旋转设备-获取ViewModel参考:TestViewModel@e71fab8
  • 3)打开ActivityB
  • 4)旋转装置
  • 5) 按返回(完成活动 B)
  • 6) Activity A 从堆栈返回 - 获取 ViewModel 并引用:TestViewModel@260072e

我已经使用工厂和默认创建方法两种 ViewModel 进行了测试:

  • ViewModelProviders.of(this).get(TestViewModel::class.java)
  • ViewModelProviders.of(this, 工厂).get(DashboardViewModel::class.java)

这两个 Activity 都扩展了 AppCompatActivity 类。

它使用 arch 版本 1.1.1 和 1.1.0 进行了测试。

-