优化应用的功耗

本文档介绍了关于在使用 Navigation SDK 构建的移动导航应用中优化功耗的最佳实践。同时,本文还介绍了在采用这些做法时需要权衡的利弊。具体而言,本文档介绍了以下内容:

  • 高功耗来源,按从高到低排序。
  • 按照重要性排序的功耗优化策略(从帧速率开始)。
  • 指导应用用户在导航时管理设备使用情况的最终用户策略

为什么要优化导航应用?

根据具体情况,应用用户可能会长时间运行导航指导。例如,司机和快递员可能会长时间工作,在陌生地区完成任务。在这些情况下,他们主要依赖于应用内精细导航指导。这会导致一些典型问题:

  • 耗电情况和充电器的可用性。大量使用导航可能会导致设备耗电速度快于预期。虽然许多用户可以通过在车内为设备充电来解决此问题,但双轮机动车司机却无法做到这一点。
  • 设备因过热而受到限制。即使是持续为设备充电的用户也会遇到问题。长时间消耗高功耗可能会导致设备发热,从而导致温控降频,进而造成性能损失。

精细导航应用依赖于耗电量大的功能(例如屏幕、GPS 以及与手机基站的无线电通信),因此最佳做法是优化移动应用的耗电量。此外,您还应考虑目标受众群体的耗电量需求,以便在性能和优化功耗之间进行适当的权衡。

什么设备最耗电?

本部分将与高功耗相关的应用内活动分为两类:

  • 屏幕呈现
  • 位置信息更新

屏幕呈现

在移动导航应用中,屏幕呈现通常会导致最高的功耗。设备每次在屏幕上绘制地图和其他界面元素时,都会依赖 GPU 和 CPU 处理。同样,如果用户长时间让屏幕保持开启状态,也会消耗更多电量。

在某种程度上,使用可见地图导航的驾驶员或乘客会消耗很多电量,特别是在他们长时间持续使用该应用的情况下。在这种情况下,应用还会在屏幕上执行更高的渲染,因为地图随后会实时更新。在某些情况下,屏幕几乎可以连续重绘,特别是当用户不停地从一个位置开到另一个位置时。

位置信息更新

除屏幕呈现外,另外两个导航 activity 也会消耗设备电量:

  • 无线电手机信号塔和 GPS 使用情况
  • 位置信息更新和共享,例如提供预计到达时间或报告车队中车辆的位置。

GPS 和手机无线装置通信都依赖于高功耗的启动操作:GPS 必须找到卫星,而手机无线装置必须与信号塔协商并建立连接。由于这些原因,即使手机无线装置保持活跃状态 20-30 秒以尽量降低启动费用,它们在导航期间基本上会持续运行。这些设置由操作系统控制,您无法在应用中轻松配置这些设置。

对于位置信息更新,耗电量取决于不可预测的因素。例如,设备和移动网络基站之间的距离决定了耗电量,因为设备将使用继续导航所需的最小信号以避免切换基站。因此,如果设备在连接状况不佳的区域导航,将比基站靠近的地方耗用更多的电量。此外,某些应用可能会与中央舰队管理服务共享位置信息更新,因此需要与服务器通信才能完成此操作。

优化应用的耗电量

优化导航应用功耗的挑战在于,这些应用严重依赖高耗电资源,这会限制您在没有做出权衡(例如限制屏幕使用)的情况下降低影响的选项。本部分列出了您在优化应用时可以采用的方法,效果按影响程度从高到低的顺序排序。

更改帧速率

屏幕会以称为帧速率的频率更新显示的内容。帧速率通常以每秒帧数 (FPS) 为单位。由于屏幕渲染会占用大量 CPU 或 GPU,因此您可以降低帧速率以节省功耗。

降低帧速率时,需要权衡的是屏幕渲染可能不太流畅,尤其是在地图更新频繁的情况下。当地图放大以显示高细节、用户高速行驶或者大幅改变速度或方向时,上述情况可能是最明显的。

在 iOS 设备上,Maps SDK for iOS 提供了 preferredFrameRate 属性来控制帧速率。下表显示了您可以调整的 GMSFrameRate 枚举器值:

kGMSFrameRatePowerSave

使用最低帧速率以节省电量。

kGMSFrameRateConservative

使用中位数帧速率,可以实现更流畅的渲染并缩短处理周期。

kGMSFrameRateMaximum

使用设备的最大帧速率。

对于低端设备,此值为 30 FPS;对于高端设备,此值为 60 FPS。

如需参考信息,请参阅 iOS 版 Google 导航 SDK 文档中的 GMSFrameRate

虽然您无法控制最终用户设置设备屏幕亮度的方式或屏幕保持开启时长,但您可以提供在没有地图的情况下进行导航的选项。这样,最终用户就可以选择该选项以节省电量。例如,如果驾驶员经常在同一个社区工作,他们可能不需要那么频繁地需要基于地图的指导。您可以在 Navigation SDK 中设置目的地启动指南,但不显示地图,以启用没有地图的导航。

添加一行代码以隐藏GMSMapView

mapView.isHidden = true

Navigation SDK 将继续更新道路贴靠位置、预计到达时间和剩余行程距离,并且随着驾驶员继续前进,您的应用仍然可以订阅 SDK 引发的所有事件。这并不适合所有用例,当然,如果驾驶员需要查看地图和遵循视觉指导,也不是很好的建议。以下屏幕截图展示了在有效导航期间切换地图视图的并排比较。

运行演示版应用,显示地图视图。
图 1.Navigation SDK iOS 演示版应用,其中显示了数据返回演示
演示版应用正在运行,未显示地图视图。
图 2. 在不显示地图视图的情况下运行的演示版应用。请注意,剩余时间和距离以及道路贴靠位置仍在更新。

使用深色地图样式

不妨考虑设置地图样式以使用深色主题,以减少在屏幕上渲染地图所需的电量。

Navigation SDK 使用 Google Maps SDK for iOS 渲染其地图,其中包含用于为应用中的所有非导航地图视图设置样式的选项。导航视图还支持强制启用深色模式。由于屏幕类型不同,这可能不会以相同的方式影响所有设备,但在某些情况下,确实可以节省电量。近期的一项研究发现,在某些屏幕上深色模式可节省的电量取决于屏幕启动时的亮度。例如,与亮度已调整到最大亮度的 30-50% 的屏幕相比,深色模式可以节省设置为全亮度的屏幕,从而节省更多电量。在应用中使用深色模式时,请务必考虑这一点,因为省电效果取决于最终用户设置屏幕亮度的方式。

如需详细了解如何修改导航界面,请参阅修改导航界面

在采用深色地图样式的 iPhone 15 Pro 上运行的 Navigation SDK 的屏幕截图。
图 3. 配置了深色地图样式的 Navigation SDK
使用 mapID 配置 GMSMapView(表示项目中定义的云端地图样式)。

云端地图样式设置需要使用地图 ID,该 ID 表示在您的 Google 控制台项目中创建的服务器端地图配置。如需详细了解如何创建地图 ID,请参阅地图 ID 开发者文档。如需详细了解如何设计和部署云端地图样式,请参阅有关创建和管理云端地图样式的开发者文档。

更改 GPS 位置更新频率

在考虑设备发送的位置信息更新的耗电量时,请更多关注位置信息更新的频率,而不是传输中发送的数据量。

您无法在 Navigation SDK 中直接控制这一点。 上述建议同样适用于使用非 GPS 位置源(手机和 WiFi)。

培训用户

您的应用用户可能想知道如何优化他们的耗电量。为了帮助用户降低应用的功耗,建议他们执行以下操作:

  • 锁定手机
  • 将导航应用置于后台
  • 尽可能使用导航而不显示地图
  • 降低屏幕亮度,方法是为 OLED 和 AMOLED 屏幕使用深色模式,或启用自适应亮度
  • 让设备保持凉爽
  • 连接到车载 Wi-Fi(如果可用)

测量功耗

您可以使用专业级工具测量功耗,但通常很难测量功耗或成本高昂。 应用和 IDE 性能剖析工具(如 Android Studio 中的功耗性能分析器XCode 组织者中的“Battery Usage”窗格)可以衡量功耗,但可能很难消除后台进程的影响,也很难设置要衡量的性能基准。在某些情况下,设备限制可能会阻止获取必要数据的访问权限。

您可以使用专用电源监控硬件并修改电池连接配置,商业产品和服务也可以帮助您执行此操作。请注意,以这种方式修改设备可能会导致设备的保修失效。