Android FusedLocationProviderClient和Wakelocks

Android FusedLocationProviderClient和Wakelocks,android,geolocation,android-location,android-wake-lock,jobintentservice,Android,Geolocation,Android Location,Android Wake Lock,Jobintentservice,我正在实现一个解决方案来跟踪应用程序中的位置更新,包括前台和后台,并在位置更新时执行一些任务 根据中的Google建议,我使用了requestLocationUpdates API的PendingEvent变体 当位置发生变化时,执行任务的最佳方式是什么 根据Google示例,位置更改时要执行的任务在广播接收器的onReceive()中完成。这种方法不处理唤醒锁和设备后台限制 根据我对stackoverflow各种答案和不同博客的理解,我必须使用JobIntentService 使用JobInt

我正在实现一个解决方案来跟踪应用程序中的位置更新,包括前台和后台,并在位置更新时执行一些任务

根据中的Google建议,我使用了requestLocationUpdates API的PendingEvent变体

当位置发生变化时,执行任务的最佳方式是什么

根据Google示例,位置更改时要执行的任务在广播接收器的onReceive()中完成。这种方法不处理唤醒锁和设备后台限制

根据我对stackoverflow各种答案和不同博客的理解,我必须使用JobIntentService

  • 使用JobIntentService是否符合我的要求

  • 当设备处于睡眠模式时(我知道JobIntentService会自动处理唤醒锁),应用程序是否需要获取唤醒锁才能在位置更改时执行任务

  • 当调用诸如onlocationChanged()之类的系统回调时,BroadcastReceiver()的onReceive()会在设备处于睡眠模式时自动唤醒CPU。如果唤醒,它将激活多长时间?它是否等待回调完成


  • 在Android源代码注释中找到一些有用的信息

    “当调用位置回调时,系统将保持唤醒锁 在一段时间内代表您的申请,但不是 无限期。如果应用程序需要长时间运行的wakelock 在位置回调中,您应该自己获取它。”

    正在使用JobIntentService是满足我需求的正确方法

    使用JobIntentService是正确的方法, 1.它可以处理唤醒锁, 2.由于Android“O”及以上版本有后台限制,所以它可以在打盹模式的维护窗口中工作

    当设备处于睡眠模式时(我知道JobIntentService会自动处理唤醒锁),应用程序是否需要获取唤醒锁才能在位置更改时执行任务。

    位置更改回调带有已获取的唤醒锁,如果回调被返回,则会释放。对于回调中的任何冗长任务,必须使用wakelocks在回调中启动服务(JobIntentService在这里会有所帮助)

    当调用诸如onlocationChanged()的系统回调时,BroadcastReceiver()的onReceive()会在设备处于睡眠模式时自动唤醒CPU。如果唤醒,它将激活多长时间?是否等待回调完成。

    系统回调通常伴随着获取的wakelocks而来,并在回调返回时释放。当它们在UI主线程中运行时,任何要完成的任务都必须卸载到服务中。为了使服务即使在设备睡眠用例中也能运行,必须获得wakelocks,JonIntentService在这里也提供了帮助

    JobIntentservice还以最佳方式处理打盹模式

    注意:由于后台位置限制,要获得连续的位置更新,应用程序必须启动前台服务