我很后悔开了这个贴。
除了 6 楼的 @
sanousun 同学给出了建设性的答复,其他人始终慢了好几拍。
我已经把状况讲得这么清楚了。
为避免这些离题的回复 给后来者造成困扰,这里统一回复一下:
任何技术绝非凭空存在,既然存在了,就有存在的缘由。
ViewModel 被如此设计,当初就是有考虑过 使其作为跨页面共享的存在。
当 lifeCyclerOwner 传入的是 fragment 的宿主 Activity,那么这个 ViewModel 就是被该 Activity 所持有、可以被旗下 Fragments 所共享。
共享 ViewModel 的作用多是为了跨页面的通信,例如回调、实时通信等等。
LiveData 的存在是为了确立 通过唯一可信源分发状态 的开发模式,以避免旧时候滥用 EventBus 导致的 难以追溯、数据过时 等问题。
同时在 ViewModel 或单例的配合下,它使单向依赖成为了可能。
再者它也可以规避一些生命周期问题。
这也就是为什么我选择标准化的 Jetpack MVVM 架构来完成状态管理。
除了状态管理,MVVM 同样有这个条件,甚至是更好的条件,来支持消息推送。这也就是为什么我要用 LiveData 来实现跨页面通信,而拒绝使用 EventBus。
而既然考虑到 共享 ViewModel,那么 LiveData 也理应考虑到应解除对默认 粘性设计的支持。
这个粘性设计或许在 视图控制器 重建 恢复状态时有用,在消息通信时则是个麻烦,所以我说这是个 bug,务必解决。