首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FusedLocationProviderClient和Wakelocks

FusedLocationProviderClient和Wakelocks
EN

Stack Overflow用户
提问于 2019-09-12 14:27:31
回答 1查看 632关注 0票数 1

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

根据https://developers.google.com/android/reference/com/google/android/gms/location/FusedLocationProviderClient#requestLocationUpdates(com.google.android.gms.location.LocationRequest,%20android.app.PendingIntent)中的谷歌建议,我使用了requestLocationUpdates API的PendingIntent变体。

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

根据Google https://github.com/googlesamples/android-play-location/tree/master/LocationUpdatesPendingIntent,位置变化时要执行的任务是在广播接收器的onReceive()中完成的。这种方法不处理唤醒和设备背景限制。

根据我的理解,在浏览了各种堆栈溢出答案和不同的博客之后,我必须使用JobIntentService。

  1. 使用JobIntentService是满足我的需求的正确方法吗?
  2. 当设备处于睡眠模式时,当位置改变时,应用程序需要获取唤醒锁来执行任务(我知道JobIntentService会自动处理唤醒锁)。
  3. 当像onlocationChanged()这样的系统回调被调用时,BroadcastReceiver()的onReceive()会在设备处于睡眠模式时自动唤醒。如果被唤醒,它会激活多少时间?它是否等待回调完成。
EN

回答 1

Stack Overflow用户

发布于 2019-09-12 15:04:51

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

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

https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/location/java/android/location/LocationManager.java

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

使用JobIntentService将是正确的方法,1。它可以处理唤醒,2。由于Android "O“及以上版本都有背景限制,所以它可以在打瞌睡模式的Maitainance窗口工作。

当设备处于睡眠模式(我知道会自动处理唤醒)时,当位置发生变化时,JobIntentService确实需要获取唤醒锁来执行任务。

如果返回回调,则位置更改回调会随已获得的唤醒而来,并且会丢失。对于回调中的任何冗长任务,服务必须在带唤醒的回调中启动(JobIntentService在这里会有所帮助)。

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

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

JobIntentservice还以最好的方式处理打瞌睡模式。

注意:由于背景位置的限制,要获得连续的位置更新,App必须启动前台服务。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57908911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档