【问题标题】:Best way get GPS Location in background for Android API level 30 and higherAndroid API 30 及更高级别在后台获取 GPS 位置的最佳方式
【发布时间】:2021-03-11 22:11:52
【问题描述】:

我的应用程序根据用户的位置确定速度限制,并告诉用户他是否超过了它。 从 Android API 级别 30 及更高级别开始,Google 已将 IntentService 定义为deprecated,并建议使用WorkManagerJobIntentService,并声明必须从Firebase JobDispatcher 迁移到WorkManager。我看到了解决这个问题的两种方法:

  1. 启动OneTimeWorkRequest,并指定在应用程序在后台运行时在此方法中定期重启此方法。
  2. 运行PeriodicWorkRequest,最小允许间隔为 15 分钟。在这个方法中,运行JobIntentService方法,runs for up to about 10 minutes,但是该方法可能没有运行,或者可能在完成之前被系统销毁。

我很担心:

  • 潜在的内存泄漏;
  • WorkManager 或 JobIntentService 在从前台转到后台(反之亦然)时可能出现问题
  • 能够使用 MVVM 模式

【问题讨论】:

    标签: android location intentservice android-workmanager jobintentservice


    【解决方案1】:

    我更喜欢使用第二个选项,它可以让您在每次重新安排 Worker 之间有更多时间。

    关于您的担忧:

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

    【讨论】:

      猜你喜欢
      • 2015-04-16
      • 2015-09-08
      • 1970-01-01
      • 2015-02-03
      • 1970-01-01
      • 2021-01-24
      • 2018-02-25
      • 1970-01-01
      • 2013-03-17
      相关资源
      最近更新 更多