Skip to content
阅读进度

ViewModel 为什么能保留页面状态? ​

返回 View 与显示链路 目录

标准回答 ​

ViewModel 由 ViewModelStoreOwner 管理。配置变化重建 Activity / Fragment 时,可以复用同一作用域里的 ViewModel,因此正在进行的状态管理不必随 View 一起重建。

关键机制 ​

  • 作用域结束时会清理,例如 Activity 真正 finish;导航图或 Fragment 也可以提供自己的作用域。
  • UI 用 Lifecycle 感知的方式观察状态,避免不可见时仍做无意义的界面工作。
  • 进程被杀后 ViewModel 对象消失;小量恢复信息交给 SavedStateHandle,业务数据交给持久层。

通俗例子 ​

屏幕旋转只是换了“展示窗口”,设备列表和加载状态还由同一个 ViewModel 管理;重新打开已结束的页面通常会得到新的实例。

易混淆点 ​

缓存了对象不等于所有问题自动解决。并发刷新、错误重试、一次性动作重复消费仍要设计。

参考资料 ​

内容来源 ​

用完整回答理解机制,用真实证据解释项目。