Android 用于位置跟踪的前台服务与WorkManager

Android 用于位置跟踪的前台服务与WorkManager,android,android-architecture-components,android-location,android-workmanager,foreground-service,Android,Android Architecture Components,Android Location,Android Workmanager,Foreground Service,比如说,我想构建一个定期请求当前位置(例如,每10分钟,这个数字应该是可配置的)并提交给服务器的应用程序 我知道对于这种情况,前台服务和WorkManager通常是建议使用的。然而,哪一个更合适?下面是我的想法和疑虑 WorkManager-主要用于保证执行的可延迟后台工作。然而,我知道Android 8(API 26)引入了后台位置,这限制了位置每小时只更新几次。因此,这可能不符合要求的定期更新 ForegroundService-非常适合运行和需要让用户意识到的东西。出于隐私目的,建议使用

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

我知道对于这种情况,前台服务和WorkManager通常是建议使用的。然而,哪一个更合适?下面是我的想法和疑虑

  • WorkManager-主要用于保证执行的可延迟后台工作。然而,我知道Android 8(API 26)引入了后台位置,这限制了位置每小时只更新几次。因此,这可能不符合要求的定期更新

  • ForegroundService-非常适合运行和需要让用户意识到的东西。出于隐私目的,建议使用这种场景(位置跟踪)。谷歌还创建了一个示例应用程序来推广这种做法

  • 从上面的分析来看,
    ForegroundService
    似乎就是其中之一。但是,我还发现,
    WorkManager
    具有内置的支持,可以通过
    androidx.work.impl.foreground.SystemForegroundService将Worker与
    ForegroundService
    结合使用

    这让我感到困惑,我应该使用什么,谷歌在这个特定场景中真正推荐什么


    有人知道吗?

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

    工作经理没有重新提交意图和所有其他命令的选项,如开始粘贴等

    因为work manager更适合与db同步数据、处理文件等

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


    这两种解决方案都无法经受OEM对电池的严格限制,因为WorkManager的工作可以推迟,如果我希望即时执行与唤醒锁相结合,我可以在前台服务中轻松实现,因为它还有一个活页夹选项,可以很好地用于UI同步。

    Hi here,如果要求操作系统终止向服务器发送定期位置更新的进程,同时向服务器发送更新以通知已发生此情况,即不再接收位置更新,您是否介意分享您的建议。我认为前台服务具有更高的优先级,因此,是的,这是维护位置更新过程的最佳方式,但如果操作系统终止前台服务,我将如何通知服务器。检查这一点的最佳方式是,定期向服务器发送位置更新,并有一个标志hasEnded,如果这总是错误的,并且后端检测到你在30秒内没有打电话,它应该发送一个推送通知,在那里你检查前台服务是否被终止,并在那里ping aphi,谢谢你的建议。我希望前台服务被关闭时会触发某种onDestroy事件。你介意分享你的决定吗?