【问题标题】:Excessive WakeUps warned by Android Vitals for Google Play Services geofencesAndroid Vitals 警告 Google Play 服务地理围栏的过度唤醒
【发布时间】:2018-08-04 00:32:06
【问题描述】:

我目前正在开发一个适用于 Android 的示例应用程序,该应用程序使用 用于位置监控的地理围栏,我发现很难遵守 具有 Android Vitals 后台唤醒限制 (https://developer.android.com/topic/performance/vitals/wakeup.html)。

我正在使用 Battery Historian 来监控唤醒,而我们自己的 com.google.android.location.ALARM_WAKEUP_ACTIVITY_DETECTION 的警报频率均低于每小时一次 和 com.google.android.location.ALARM_WAKEUP_LOCATOR 以更高的速率触发。 我尝试将地理围栏响应延迟设置为 5 分钟,并设置 WAKEUP_LOCATOR 警报 大大减少了。尽管如此,ALARM_WAKEUP_ACTIVITY_DETECTION 警报仍然远远超过 10 次/小时的限制。

按照here 的建议,我们使用半径为 100m 的地理围栏并监控出口过渡。我还使用半径高达 2 公里的更大地理围栏来定义何时需要重新加载地理围栏,以避免一次加载过多的地理围栏。

最近的测试是在 Galaxy S8 上的 Android 7.1 上进行的,但这种情况在其他设备上很常见。 有没有人有类似的问题? Google 建议使用地理围栏,尤其是考虑到 Oreo对后台位置请求的限制,所以奇怪的是一个系统监控工具 当这是避免唤醒的建议方法时,会考虑如此多的唤醒。

Ps:我已经阅读了 Yvette Colomb 的回答 here,并且我没有使用位置更新,只有地理围栏服务。我应该放弃吗?

[编辑] 安卓地理围栏的文档可以在这里看到:https://developer.android.com/training/location/geofencing.html

[编辑 2]Android tracker 上有一个问题正在讨论这种情况,但在这方面也没有新的更新

[编辑 3]:问题是在 Google 问题跟踪器上分配的。于~22/08/2018

感谢您的关注,

【问题讨论】:

  • 这取决于您的应用目标。 Android vitals 旨在提高 Android 设备的稳定性和性能。收集的数据将帮助您提高应用程序的稳定性和性能。这将帮助您在使用应用程序时最大限度地利用手机电池。它可能需要根据您收到的数据进行一些调整。希望这会有所帮助。
  • 感谢您的回答!但我的问题是,即使使用基本的地理围栏,根据谷歌建议的最佳实践,也会使数字超出 Android Vitals 的要求。更糟糕的是,谷歌的所有应用程序(例如谷歌地图)都远远超过唤醒次数(当限制为 10 时达到每小时 14 次唤醒。在我的场景中,我只是在用户离开家时警告用户执行他定义的操作(例如)。我认为要么需要重新评估 Android Vitals 的政策,要么必须更新 Android 地理围栏服务。:(
  • @GabrielFalcone 你找到解决这个问题的办法了吗?
  • @aga 不是一个令人满意的。我最终求助于自己的验证和更大的地理围栏(500m)。它使我的应用程序“更多”地被唤醒,但警报计数器总体上减少了(在最坏的情况下从 15 减少到 ~6),仍然比触发它好。
  • 我看到有人为 Android 创建了一个错误报告,但也遇到了同样的问题。但是,该工单仍然具有 New 状态,没有任何响应。票在这里:issuetracker.google.com/issues/78591747 好奇是否有人找到了更好的解决方法。

标签: android google-play-services geofencing wakeup


【解决方案1】:

显然,Google 问题跟踪器上的此主题已标记为已修复。 我还没有验证它。

【讨论】:

    【解决方案2】:

    这是 com.google.android.location.ALARM_WAKEUP_LOCATOR 每 60 秒唤醒一次设备并让它们保持唤醒状态长达 15 秒的问题,从而导致严重的电池耗尽问题。

    对于地图,您必须设置更多时间来更新位置间隔。在我的情况下,我这样做了 让我知道它是否有效

     private long UPDATE_INTERVAL = 5 * 6000;
        private long FASTEST_INTERVAL = 6000;
    //Set max update intervel for remove excessive wakeups...
            mLocationRequest.setInterval(UPDATE_INTERVAL);
            mLocationRequest.setFastestInterval(FASTEST_INTERVAL);
            mLocationRequest.setMaxWaitTime(30 * 60000);
            mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
    

    【讨论】:

    • 恐怕这不是一个选项,因为我不要求位置,只要求地理围栏,因此没有最快的间隔也没有优先级。地理围栏的文档在这里:developer.android.com/training/location/geofencing.html。我使用了所有可用的参数来减少,例如减少响应延迟,但没有一个是令人满意的。 :(
    猜你喜欢
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多