android的ViewModel的奇怪行为

Mos*_*afa 3 android android-viewmodel android-architecture-components

当我尝试通过在每次离开活动并返回时在开发人员选项中启用“不要保留活动”来模拟应用程序中的配置更改时,将ViewModel重新创建该活动!不ViewModels应该处理这些情况吗?

我可以通过保存活动状态来解决此问题,onSaveInstanceState但是使用a的意义ViewModel何在?

Com*_*are 7

当我每次离开活动并返回时尝试通过在开发人员选项中启用“不要保留活动”来模拟应用程序中的配置更改时,都会重新创建ViewModel!

AFAIK,“不要保留活动”会在您离开活动时破坏活动。它不模拟配置更改。

在Android 8.1上,该设置特别指出:“用户离开后立即销毁每个活动”。

ViewModel不应该处理这些情况吗?

ViewModel系统处理的配置变化。它不处理活动被破坏或进程被终止。

要模拟配置更改,请更改配置。例如,您可以旋转屏幕或更改语言环境。

我可以通过将活动状态保存在onSaveInstanceState中来解决此问题

可以进入已保存实例状态的所有内容Bundle都应进入已保存实例状态Bundle,因为它可以处理配置更改和进程终止。

使用ViewModel有什么意义?

ViewModel是否存在无法进入已保存实例状态的事物Bundle,例如:

  • 大事(Bitmap照片)
  • LiveData生物(,RxJava Observable等)
  • 输入错误的内容(您不能Socket在中输入Bundle
  • 事情实际上不是“实例状态”的一部分,万一Android终止了该过程,则不需要,但是您希望将它们放在一起进行简单的配置更改
  • 等等