如何将viewmodel单例用于活动?

can*_*wow 5 android android-livedata

MyApp 需要在整个上下文中保存一个 User 对象?A、B、C 活动的 xml 使用这个 User 对象,当 A 编辑用户时,我想让 B 和 C 通知更改,如何处理 databinding、livedata 和 viewModel 的这个问题?

以前我让User.class扩展BaseObservable,但是POJO会很麻烦,不能为空,有时User可能为空,比如没有登录。现在我改为使用 LiveData,使 Pojo 变得简单而不扩展 BaseObservable,但是当 A 编辑、B 和 C 不起作用时,我想我需要 ABC 在内存中使用相同的 viewModel 实例,但这会导致多次触发 viewModel 的 onClear()。

小智 5

另一种方法是使用一个单例存储库来保存用户数据,每个 viewModel 都可以拥有该存储库并在活动之间共享相同的数据。


Ase*_*rma 1

如果您想在 ABC Activity 之间共享公共 ViewModel,那么建议将它们保留为单个 Activity 中的 3 个片段,创建该 Activity 的 ViewModel,该 ViewModel 可以在所有三个片段 A、B 和 C 之间共享。

另外,您想要通过活动实现的目标是这样的,假设您在活动 A 中完成了一些操作,如果您希望活动 B 和 C 收到有关它们的通知,那么它们需要运行才能收到通知,这不会正在发生,因此您应该在活动开始时使用Intent或传递所需的信息。Bundle

更新

还有其他方法可以实现类似的功能,例如,

  • 活动总线
  • RxJava 主题(参考
  • Evernote 的 Android State(请参阅

这将允许您拥有应用程序级别的状态访问权限,任何 Activity 或 Fragment 都可以访问该状态