先把结论放在前面:ViewModel 之所以能在配置变更后存活,靠的不是"框架魔法",而是Activity重建时由ActivityThread帮忙保留的一份"非配置实例"(NonConfigurationInstance)——旧 Activity 的ViewModelStore被塞进这个对象传给新 Activity,新 Activity 取出来继续用。整条链路只有四步,但每一步都有明确的边界与失效条件,这正是"能讲全的人不到两成"的原因。这题的高频丢分点是边界不清:能说清"旋转屏幕不丢",但说不清"进程被杀会丢"、"多 Activity 共享的其实是同一个 Application 级 Store"、"手动 new 的 ViewModel 根本不受管"。把这四条边界都答上,才是"讲全"。四步链路:数据是怎么活下来的① 旧 Activity 创建 ViewModel ViewModelProvider.get() → key = 类名 + 身份 → 查 NewInstanceFactory 反射创建 → put 进 mViewModelStore → Activity.getViewModelStore() 挂到 ViewModelStoreOwner ② 发生配置变更(旋转) Activity.onSaveInstanceState 之后 → ViewModelStore 被存入 ActivityClientRecord 的 NonConfig