首页 > 解决方案 > android的ViewModel的奇怪行为

问题描述

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

我可以通过保存我的活动状态来解决这个问题,onSaveInstanceState但是使用 a 有什么意义ViewModel呢?

标签: androidandroid-architecture-componentsandroid-viewmodel

解决方案


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

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

在 Android 8.1 上,该设置明确指出:“用户离开后立即销毁所有活动”。

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

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

要模拟配置更改,请更改配置。例如,您可以旋转屏幕或更改您的区域设置。

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

任何可以进入已保存实例状态的东西Bundle都应该进入已保存实例状态Bundle,因为它处理配置更改和进程终止。

使用 ViewModel 有什么意义?

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

  • 大事(Bitmap照片)
  • 活的东西 ( LiveData, RxJavaObservable等)
  • 输入错误的东西(你不能把 a 放在 aSocketBundle
  • 并非真正属于“实例状态”的东西,在 Android 终止进程时不需要,但您希望使用它们进行简单的配置更改
  • 等等

推荐阅读