前台服务与 WorkManager 进行位置跟踪

H.N*_*yen 11 android android-location foreground-service android-architecture-components android-workmanager

假设我想构建一个应用程序,它定期请求当前位置(例如,每 10 分钟一次,这个数字应该是可配置的)并提交到服务器。

我知道对于这种情况通常建议使用 Foreground Service 和 WorkManager。然而哪个更适合呢?以下是我的想法和疑问。

  1. WorkManager - 主要用于可延迟的后台工作,其执行是有保证的。但我知道从 Android 8 (API 26) 开始引入了后台位置,并且限制位置每小时只能更新几次https://developer.android.com/about/versions/oreo/background-location-limits。因此,这可能不符合定期更新的要求。

  2. ForegroundService - 非常适合运行并需要让用户意识到的东西。出于隐私目的,建议这种情况(位置跟踪)使用。Google 还创建了一个示例应用程序来推广这种做法https://github.com/android/location-samples/tree/master/LocationUpdatesForegroundService

从上面的分析来看,似乎ForegroundService是这样的。但是我还发现它WorkManager具有内置支持,可ForegroundService通过androidx.work.impl.foreground.SystemForegroundService https://developer.android.com/topic/libraries/architecture/workmanager/advanced/long-running#long-running-kotlin结合使用 Worker

这让我很困惑,不知道我应该使用什么,以及谷歌针对这个特定场景真正推荐的是什么。

有人有什么想法吗?

小智 5

如果您想以某种方式与服务进行通信,请使用前台服务,如果您想根据您在该工作管理器中所做的其他操作来处理一些输入,则选择工作管理器。

工作管理器没有重新传递意图和所有其他命令(例如开始粘性等)的选项......

由于工作管理器更适合与数据库同步数据、处理文件等。

如果您问我,我会选择前台服务,因为您可以在清单中注册时将类型位置添加到 xml 标记。

这两种解决方案都无法承受 OEM 严格的电池限制,因为 WorkManager 的工作可以推迟,如果我想要即时执行与唤醒锁相结合,我可以轻松地在前台服务中完成它,因为它还有一个非常适合 UI 同步的活页夹选项。