优化应用的功耗

本文档介绍了如何优化使用 Navigation SDK 构建的移动导航应用的耗电量。同时,它还介绍了采用这些实践时需要考虑的权衡因素。具体而言,本文档涵盖以下内容:

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

为何要优化导航应用?

根据具体情况,应用用户可能会长时间运行导航指导。例如,司机和送货员可能需要长时间工作,在不熟悉的区域完成任务。在这种情况下,他们会非常依赖应用内的逐向导航。这会导致一些典型问题:

  • 电池电量消耗和充电器可用性。频繁使用导航功能可能会导致设备电池电量消耗速度比预期更快。虽然许多用户可以通过在车内为设备充电来解决此问题,但两轮车驾驶员无法这样做。
  • 设备因过热而降频。即使是持续为设备充电的用户也可能会遇到问题。长时间的高功耗可能会导致设备发热,从而导致温控降频和随后的性能损失。

路线规划应用依赖于屏幕、GPS 和与基站的无线电通信等耗电量大的功能,因此最好优化移动应用的功耗。此外,您还应考虑目标受众群体的功耗需求,以便在性能和优化功耗之间做出适当的权衡。

什么最耗电?

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

  • 屏幕呈现
  • 位置信息动态

屏幕呈现

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

在一定程度上,依赖可见地图进行导航的司机或乘客可能会消耗大量电量,尤其是当他们连续使用应用数小时时。在此场景中,应用还会在屏幕上以更高的速率执行渲染,因为地图会实时更新。在某些情况下,屏幕几乎可以持续重绘,尤其是在用户不停地从一个位置开车前往另一个位置时。

位置信息动态

除了屏幕渲染之外,还有两项导航活动会消耗设备电量:

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

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

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

优化应用的耗电量

导航应用在优化能耗方面面临的挑战是,这些应用严重依赖耗电资源,这限制了您在不做出限制屏幕使用等权衡的情况下减轻影响的选择。本部分按效果从高到低的顺序列出了优化应用时可以采取的方法。

更改帧速率

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

降低帧速率的缺点是,屏幕渲染可能会显得不够流畅,尤其是在地图频繁更新的情况下。当地图放大、用户高速行驶或大幅改变速度或方向时,此问题可能最为明显。

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

kGMSFrameRatePowerSave

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

kGMSFrameRateConservative

使用中位帧速率可提供更流畅的渲染效果并节省处理周期。

kGMSFrameRateMaximum

使用设备的最高帧速率。

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

如需了解相关信息,请参阅 Google Navigation SDK for iOS 文档中的 GMSFrameRate

虽然您无法控制最终用户如何设置设备屏幕亮度或屏幕保持开启的时间,但您可以提供使用地图的导航指导选项。这样,最终用户就可以选择该选项来节省电量。例如,如果司机经常在同一社区工作,可能就不需要经常使用基于地图的导航。在 Navigation SDK 中,您可以设置目的地开始引导,但不显示地图,从而实现无地图导航。

添加一行代码以隐藏 GMSMapView

mapView.isHidden = true

导航 SDK 将继续更新贴合道路的位置、预计到达时间和剩余行程距离,并且您的应用仍然可以订阅司机继续行驶时 SDK 触发的所有事件。这并非适用于所有使用场景,当然,如果驾驶员需要查看地图并遵循视觉引导,那么这种做法就不是好建议。以下屏幕截图展示了在有效导航期间切换地图视图的并排比较。

正在运行的演示应用,地图视图可见。
图 1.导航 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 位置来源(移动网络和 Wi-Fi)时,也应遵循相同的建议。

为用户提供更多相关信息

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

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

测量功耗

您可以使用专业级工具来测量功耗,但这些工具通常难以获得或成本高昂。 应用和 IDE 性能分析工具(例如 Android Studio 中的 Power ProfilerXCode Organizer 中的“电池用量”窗格)可以测量能耗,但很难消除后台进程的影响或设置用于测量的性能基准。在某些情况下,设备限制可能会阻止您获取必要的数据。

您可以使用专用电源监控硬件并修改电池连接配置,市面上也有相关产品和服务可帮助您实现此目的。请注意,以这种方式修改设备可能会使设备保修失效。