后台过多的 Wi-Fi 扫描

当应用在后台执行 Wi-Fi 扫描时,会唤醒 CPU,导致电池电量消耗加快。当扫描过多时,设备的电池续航时间可能会明显缩短。如果应用处于 PROCESS_STATE_BACKGROUNDPROCESS_STATE_CACHED 状态,则被视为在后台运行。

本文档介绍了如何检测您的应用何时在后台执行过多的 Wi-Fi 扫描,并提供了诊断和解决问题的提示。

检测问题

您可能不总是知道您的应用正在执行过多的 Wi-Fi 扫描。如果您已经发布了您的应用,Android vitals 可以让您了解问题,以便您进行修复。

Android vitals

当您的应用在后台执行过多的 Wi-Fi 扫描时,Android vitals 可以通过 Play 管理中心向您发出提醒,从而帮助您改善应用性能。当应用每小时执行超过 4 次扫描时,Android vitals 认为 Wi-Fi 扫描过多。在 Play 管理中心,您可以查看出现此行为的电池会话百分比。

电池会话的定义取决于平台版本。

  • 在 Android 10 中,电池会话是在给定 24 小时内收到的所有电池报告的聚合。电池报告是指两次电池充电之间的时间间隔,可以是电量从低于 20% 充到高于 80%,也可以是电量从任意水平充到 100%。
  • 在 Android 11 中,电池会话是固定的 24 小时。

有关 Google Play 如何收集 Android vitals 数据的信息,请参阅 Play 管理中心文档。

调查 Wi-Fi 扫描

Battery Historian 等工具可以帮助您更深入地了解应用的扫描行为。Battery Historian 以每个应用为基础可视化 Wi-Fi 扫描行为,这可以帮助您更清楚地了解应用的情况。有关 Battery Historian 的更多信息,请参阅使用 Battery Historian 分析电量使用情况

有关使用 Battery Historian 的机制信息,请参阅Batterystats 和 Battery Historian 演练

减少扫描

如果可能,您的应用应该在应用在前台运行时执行 Wi-Fi 扫描。前台服务会自动显示通知;因此,在前台执行 Wi-Fi 扫描可以让用户知道设备上 Wi-Fi 扫描发生的原因和时间。

有关如何在前台进行扫描的信息,请参阅 WifiManager 类的文档。

如果您的应用无法避免在后台运行时执行 Wi-Fi 扫描,则可以考虑采用“懒惰优先”策略。“懒惰优先”包含三种可用于减少 Wi-Fi 扫描的技术:减少延迟合并。有关这些技术的信息,请参阅优化电池续航时间