绑定服务与存储库

Bound Service vs Repository

背景

我想知道什么时候应该使用绑定服务。在大多数情况下,我似乎可以使用存储库。

我理解绑定服务的价值是:

  1. 进程间通信
  2. 同步行为
  3. 生命周期遵守(绑定服务,如果没有使用startService开始,当它没有绑定时终止,当它被绑定时实例化)

但是,这些事情似乎可以通过 Hilt 注入存储库单例来完成。

我当前的示例包括一个未绑定的前台服务,该服务负责远程上传聚合数据,以及一个 UI 显示该数据。两个组件都需要身份验证功能。

问题

为了让 UI 和前台服务访问身份验证状态和请求,我可以做两件事:

  1. AuthenticationRepository.
  2. 注入两者
  3. 创建一个 AuthenticationService 并将两个组件绑定到它。

选项 1 感觉更简洁、更易于理解。选项 2 似乎有一些我不明白的价值。它们都提供同步、通信和生命周期依从性。

问题

我的解决方案的优缺点是什么?如何更好地定义绑定服务的用途?

I am trying to understand when I should be using bound services

大多数开发人员不需要。更具体地说,在以下情况下使用绑定服务:

  • 出于其他原因,该组件确实需要成为服务,并且
  • 您希望与该服务进行同步通信

如今,大多数情况下,这最终会成为一个 IPC 场景,无论是在核心 OS 进程与您的应用程序之间,还是在您应用程序内的两个进程之间。因此,例如,TileService 最终成为绑定服务,因为这就是 Google 定义服务与核心 OS 进程之间契约的方式。

IOW,如果依赖倒置(Dagger/Hilt、Koin 等)可以解决问题,那可能是更好的选择。

请记住,DI 的广泛使用是一个相对较新的 Android 现象(在过去 5 年内),因此较旧的材料可能会不必要地强调绑定服务。

Option 1 feels cleaner and more understandable

FWIW,我同意。