android的ViewModel的奇怪行为

时间:2018-08-09 11:20:26

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

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

我可以通过将活动状态保存在onSaveInstanceState中来解决此问题,但是使用ViewModel有什么意义呢?

1 个答案:

答案 0 :(得分:3)

  

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

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

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

  

ViewModels是否应该处理这些情况?

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

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

  

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

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

  

使用ViewModel有什么意义?

ViewModel用于无法进入已保存实例状态Bundle的事物,例如:

  • 大事(照片的{Bitmap
  • 生物(LiveData,RxJava Observable等)
  • 输入错误的内容(不能将Socket放在Bundle中)
  • 并非真正属于“实例状态”的事物,如果Android终止了该过程,则不需要这些事物,但是您希望通过它们来进行简单的配置更改
  • 依此类推