Android API 30 及更高级别在后台获取 GPS 位置的最佳方式
Posted
技术标签:
【中文标题】Android API 30 及更高级别在后台获取 GPS 位置的最佳方式【英文标题】:Best way get GPS Location in background for Android API level 30 and higher 【发布时间】:2021-03-11 22:11:52 【问题描述】:我的应用程序根据用户的位置确定速度限制,并告诉用户他是否超过了它。 从 android API 级别 30 及更高级别开始,Google 已将 IntentService 定义为deprecated,并建议使用WorkManager 或JobIntentService,并声明必须从Firebase JobDispatcher 迁移到WorkManager。我看到了解决这个问题的两种方法:
-
启动OneTimeWorkRequest,并指定在应用程序在后台运行时在此方法中定期重启此方法。
运行PeriodicWorkRequest,最小允许间隔为 15 分钟。在这个方法中,运行JobIntentService方法,runs for up to about 10 minutes,但是该方法可能没有运行,或者可能在完成之前被系统销毁。
我很担心:
潜在的内存泄漏; WorkManager 或 JobIntentService 在从前台转到后台(反之亦然)时可能出现问题 能够使用 MVVM 模式【问题讨论】:
【参考方案1】:我更喜欢使用第二个选项,它可以让您在每次重新安排 Worker
之间有更多时间。
关于您的担忧:
唯一可能的泄漏是位置回调不当。这很容易找到,您不必太担心。 计划的Worker
被放入数据库并独立于应用程序执行。这意味着,应用程序的用户可见性没有任何影响。在您的情况下,我假设您想在用户恢复应用程序后取消您的计划工作,也就是说您可以将 tag
分配给 Worker
并清除用户可见的任何计划或正在进行的工作。
我更喜欢将Worker
s 与 MVVM 隔离,只在工作程序中注入用例/交互器并执行用例/查询交互器。 WorkerManager
提供了很好的 API 来查询 Worker
状态,您可能需要在之前的实现和 API >= 30 之间编写共同点。将 Worker
视为您用例的不同执行容器。
【讨论】:
以上是关于Android API 30 及更高级别在后台获取 GPS 位置的最佳方式的主要内容,如果未能解决你的问题,请参考以下文章
Android Edittext 不能专注于 API 22(代码在 API 23 及更高版本上运行良好)
如何使用 Target API 23 及更高版本通过 GPS 获取用户位置