gpt4 book ai didi

android - Android MVVM 中的服务和 ViewModel——它们如何交互?

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:57:08 24 4
gpt4 key购买 nike

我使用 Android 架构中的 ViewModels 已经有一段时间了,并且遵守从不将 ViewModel 暴露给 Context/Views (Android Framework/UI) 的规定。然而,最近我遇到了一个有趣的问题。

制作定时器应用程序时,当定时器启动时,服务会在运行定时器的后台运行。这样,当应用程序关闭时,计时器仍然在通知栏的前台运行,直到所有计时器都停止。但是,这意味着我的所有 Timer 对象和状态都包含在此服务中。我的 UI 需要在每次更新时更新,但模型不一定需要更新 ViewModels 如何适应这种情况?

Activity 是否应该每次都接收 LocalBroadcasts 并通知 ViewModel?应该从服务-> Activity ->VM 读取 UI 状态吗? Service 几乎看起来像是 ViewModel,但这似乎效率不高。

最佳答案

在尝试了一些不同的结构之后,Service 已经找到了它在 MVVM 中的位置。在这种情况下让我失望的是认为服务不应该从 ViewModel 启动,并且需要两个存储库这一事实:用于存储计时器的房间数据库和用于表示正在进行的计时器状态的服务(onTick,播放/暂停状态等)。 ViewModel 不应该有任何对 View 的引用,但应用程序上下文是可以的。因此,可以通过扩展 AndroidViewModel 类从 ViewModel 启动服务。这是最终的结构:

模型层

  • 服务 - 维护 Activity 计时器列表、发出 onTick() EventBus 事件、维护 Activity 计时器播放/暂停状态。一旦没有 Activity 计时器就自行结束。
  • 房间数据库 - 存储计时器以备将来使用(名称、总时间等)

View 模型

  • ViewModel - 监听 UI 事件、执行业务逻辑并发出 EventBus 消息。模型中的任何更改都通过 ViewModel 传达

用户界面

  • Activity - 执行应用程序流任务。监听相关的 ViewModel 通信以交换 fragment/启动新 Activity 等。
  • Fragment - 处理动画和 UI。还通知 ViewModel 用户交互

关于android - Android MVVM 中的服务和 ViewModel——它们如何交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53103148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com