ViewModel 和 Activity 成员变量之间的区别?

4
根据这张图片,ViewModel的生命周期与Activity实例非常相似,那为什么不直接使用一个Activity实例变量呢? ViewModel更好是因为自动调用了 onClear 方法吗?还是因为它是可观测的(如果是这样,为什么不只是使用可观测的普通成员变量)?enter image description here
1个回答

3
也许图形不够清晰,但打印的生命周期钩子是来自活动,viewmodel保持不变,直到活动完全结束。
因此,在旋转后,例如在活动实例被销毁时,活动实例中的变量将被释放,同时创建一个新的活动实例。但如果它在ViewModel中,则不会发生这种情况,因为两者都使用相同的实例。

如果实例仍然存在,为什么变量会被释放?在Java对象中,实例变量可用直到垃圾回收。 - user2297550
或许图表意味着在 onDestroy 之后会为 onCreate 调用创建一个新实例?Android/Jetpack 如何知道将成员变量传输到哪个新实例中?(因为实例化不清楚而彻底困惑;抱歉) - user2297550
1
因为该活动已不再存在,因此将在同一时间创建该活动的新实例,但它们不是同一个实例。但它们将共享相同的 ViewModel。这就是为什么该图形中有 onDestroy 和 onCreate,它们来自同一个活动,但不是同一个实例。 - Buddy Christ
一个新实例共享相同的ViewModel非常重要 -- 如果您可以在回答中强调这一点,那将非常有帮助;而更好的是,如果从纯Java/Kotlin的角度来看,这个库是如何管理做到这一点的。 - user2297550

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接