Android API 30 级及更高级别在后台获取 GPS 位置的最佳方式

Best way get GPS Location in background for Android API level 30 and higher

我的应用程序根据用户的位置确定速度限制,并在用户超过时通知用户。 从 Android API 级别 30 及更高级别开始,Google 已将 IntentService 定义为 deprecated and suggests using WorkManager or JobIntentService and also states that it is necessary to migrate from Firebase JobDispatcher 到 WorkManager。我看到有两种方法可以解决这个问题:

  1. 启动 OneTimeWorkRequest 并指定当应用程序在后台 运行ning 时在此方法中定期重新启动此方法。
  2. 运行PeriodicWorkRequest with a minimum allowed interval of 15 minutes. In this method, run the JobIntentService method, which ,但该方法可能不会运行或可能在完成之前被系统销毁。

我担心:

我更愿意选择第二个选项,它可以让您在每次重新安排 Worker 之间有更多时间。

关于您的疑虑:

  • 唯一可能的泄漏是不当的位置回调。这很容易追踪到,您不必太担心。
  • 预定的Worker被放入数据库并独立于应用程序执行。这意味着,应用程序的用户可见性没有影响。在你的情况下,我假设你想在用户恢复应用程序后取消你的计划工作,也就是说你可以将 tag 分配给 Worker 并清除任何计划的或正在进行的一旦可见用户。
  • 我更喜欢将 Worker 与 MVVM 隔离开来,只在 worker 中注入 Use cases/interactors 并执行 use case/query 交互器。 WorkerManager 提供很好的 APIs 来查询 Worker 状态,你可能需要写下你之前的实现和 API >= 30 之间的共同点。对待 Worker 作为您用例的不同执行容器。