绑定服务与存储库
Bound Service vs Repository
背景
我想知道什么时候应该使用绑定服务。在大多数情况下,我似乎可以使用存储库。
我理解绑定服务的价值是:
- 进程间通信
- 同步行为
- 生命周期遵守(绑定服务,如果没有使用
startService
开始,当它没有绑定时终止,当它被绑定时实例化)
但是,这些事情似乎可以通过 Hilt
注入存储库单例来完成。
我当前的示例包括一个未绑定的前台服务,该服务负责远程上传聚合数据,以及一个 UI 显示该数据。两个组件都需要身份验证功能。
问题
为了让 UI 和前台服务访问身份验证状态和请求,我可以做两件事:
- 用
AuthenticationRepository
. 注入两者
- 创建一个
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,我同意。
背景
我想知道什么时候应该使用绑定服务。在大多数情况下,我似乎可以使用存储库。
我理解绑定服务的价值是:
- 进程间通信
- 同步行为
- 生命周期遵守(绑定服务,如果没有使用
startService
开始,当它没有绑定时终止,当它被绑定时实例化)
但是,这些事情似乎可以通过 Hilt
注入存储库单例来完成。
我当前的示例包括一个未绑定的前台服务,该服务负责远程上传聚合数据,以及一个 UI 显示该数据。两个组件都需要身份验证功能。
问题
为了让 UI 和前台服务访问身份验证状态和请求,我可以做两件事:
- 用
AuthenticationRepository
. 注入两者
- 创建一个
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,我同意。