我一直在努力思考在新的 Android 推荐的架构中安装 Android 服务的位置。我想出了许多可能的解决方案,但我不能决定哪一个是最好的方法。
我做了很多研究,但找不到任何有用的指南或教程。我找到的关于在我的应用程序架构中放置服务的唯一提示是这个,来自@JoseAlcerreca 中柱
理想情况下,ViewModel 应该对 Android 一无所知。这提高了可测试性、泄漏安全性和模块性。一般的经验法则是确保没有机器人。* 导入到 ViewModel 中(除了 android.arch 之外)。*).同样的道理也适用于演讲者。
根据这一点,我应该将我的 Android 服务放在架构组件层次结构的顶部,与我的活动和片段处于同一级别。这是因为 Android 服务是 Android 框架的一部分,所以 ViewModel 不应该知道它们。
现在,我将简要地解释我的情景,但只是为了使全景更清晰,不是因为我想要这个具体情景的答案。
下面是我能想到的3种不同的架构:
安卓服务中的 LiveData
更新: 这是我个人当时采用的方法,因为它工作得很好,让我能够相对快速地完成它。然而,我建议遵循 Jeel Vankhede 的更新答案,这似乎是一个更“惯用”的实现。
我很确定我应该把它们放在架构的顶部,就像对待活动/片段一样对待它们,因为边界服务是 Android 框架的一部分,它们由 Android 操作系统管理,并且它们与其他活动和片段绑定在一起。在这种情况下,我不知道什么是与 LiveData、视图模型和活动/片段交互的最佳方式。
有些人可能认为它们应该被看作是数据源(因为在我的例子中,它是通过蓝牙从一个比例尺中获取数据) ,但我不认为这是一个好主意,因为我在前一段所说的,特别是 因为上面写着:
避免指定应用程序的入口点,比如活动, 服务 和广播接收器ー作为数据源 与该入口点相关的数据子集。每个应用程序 组件是相当短命的,这取决于用户的交互 他们的设备和整个系统当前的健康状况。
最后,我的问题是:
我们应该把 Android (绑定)服务放在哪里? 它们与其他体系结构组件有什么关系?这些替代方案中有哪些是好的方法?