Android 8 (Oreo) 中的后台位置限制是啥?

Posted

技术标签:

【中文标题】Android 8 (Oreo) 中的后台位置限制是啥?【英文标题】:What are the background location limits in Android 8 (Oreo)?Android 8 (Oreo) 中的后台位置限制是什么? 【发布时间】:2018-12-01 00:40:57 【问题描述】:

https://developer.android.com/about/versions/oreo/background-location-limits

为了降低功耗,Android 8.0(API 级别 26)限制了后台应用检索用户当前位置的频率。应用每小时只能收到几次位置更新

该文档没有详细说明背景位置检索频率的限制。

假设我在 Android O 设备上运行的应用没有进入前台,也没有收到任何被动位置更新,我可以可靠地期望它接收多少次位置更新?

“只有几次”到底是多少次?

【问题讨论】:

Google 没有在文档中指定“仅几次”。你必须通过一些日志机制来检查它。 Google 在文档中说“只有几次” 这就是我要说的。启动后台服务,每当接收到位置信息(假设 android 不会终止您的服务),随时间将其记录到某个文件中。 说“每小时只有几次”是疯狂的,却没有解释“只有几次”是如何计算的! @RahulRastogi 是的,我觉得谷歌地图应用程序能够在后台模式下报告用户的位置数据以进行实时交通分析,这很可疑 【参考方案1】:

现在是一个很老的问题,但我最近花了很多时间试图让这样的应用程序运行。我在旧的 Android 版本中有一个完美的应用程序,但现在看来是不可能的。

答案可能会因设备而异,但使用我的 Galaxy S7 设备(奥利奥),我可以根据需要设置位置,甚至每 5 秒一次。但是在闲置 45-60 分钟后,服务只会变慢,直到应用再次手动进入前台。

我尝试过使用唤醒锁和“setAndAllowWhileIdle()”的 Job Scheduler、Worker、AlarmManager、AlarmManager,它们都给出了相同的结果:完全活动的位置更改大约 45 分钟,而不是每 15 分钟一次或所以(如果幸运的话:可能会超过一个小时,而且似乎无法预测)

[编辑,一年后] 我现在已经设法改进了这一点,通过每小时重新启动(后台)位置服务(使用警报),根据要求每 2 分钟继续更新一次(现在已经超过一周了......) - 但前提是设备要么通电向上或移动。如果使用电池,并且位置没有改变,则更新将恢复为每小时左右。在 android 11 上也是如此。请参阅我的新问题 here

【讨论】:

以上是关于Android 8 (Oreo) 中的后台位置限制是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Android Oreo如何知道FCM消息已经到来?

Android OS 特性总结

混合应用推送通知图标未在 Android 8 (Oreo) 上显示

Android - 前台在 Oreo 中不起作用。操作系统在一段时间后终止服务

Samsung / Android 8.0 Oreo 更新导致应用程序崩溃? (Xamarin.Forms 应用程序)

Android 8或更高版本使用Firebase Performance SDK在Android Oreo上崩溃的应用程序