优化应用的功耗

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

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

为什么要优化导航应用?

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

  • 电池电量消耗和是否有充电器。大量使用导航可能会导致设备耗电过快。虽然许多用户都可以通过在车内为设备充电来解决此问题,但双轮机动车驾驶人无法解决这个问题。
  • 设备因过热而节流。即使是持续为设备充电的用户也可能会遇到问题。长时间的高功耗可能会导致设备过热,造成温控降频和随后的性能损失。

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

什么组件的耗电量最大?

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

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

屏幕呈现

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

在某种程度上,您可能会发现依靠可见地图进行导航的司机或乘客非常耗电,特别是在他们连续使用应用长达数小时的情况下。在这种情况下,应用还会在屏幕上执行更高的渲染速率,因为地图随后会实时更新。在某些情况下,屏幕可能会几乎持续地重新绘制,尤其是当用户从某个位置驾车前往另一个位置时。

位置信息更新

除了屏幕渲染之外,其他两个导航 activity 也会消耗设备电量:

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

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

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

优化应用的耗电量

优化导航应用中的耗电量所面临的挑战在于,这些应用严重依赖于高耗电资源,这限制了您在不牺牲屏幕使用等条件的情况下减少影响的选项。本部分列出了在优化应用时可以采取的方法(按影响程度从高到低的顺序排列)。

更改帧速率

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

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

如需详细了解如何修改帧速率,请参阅 Android 媒体开发中心开发者文档中的帧速率部分。

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

如需隐藏导航界面,请勿添加 NavigationViewSupportNavigationFragment;如果您已这样做,请移除用于添加它们的代码。以下代码是在 Navigation SDK Android 演示版应用中修改的,展示了如何使用注释来移除用于添加导航界面的代码:

//Obtain a reference to the NavigationFragment
//setContentView(R.layout.activity_nav_fragment);
//mNavFragment = (SupportNavigationFragment)   getSupportFragmentManager().findFragmentById(R.id.navigation_fragment);

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

在显示地图视图的情况下运行的演示版应用。
图 1. Navigation SDK iOS 演示版应用,显示了 Data Back 演示版
在不显示地图视图的情况下运行的演示版应用。
图 2. 在不显示地图视图的情况下运行的演示版应用。请注意,剩余时间和距离以及道路拦截的位置仍在更新。

使用深色地图样式

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

Navigation SDK 使用 Google Maps SDK for Android 呈现其地图,其中包含用于设置应用中的任何非导航地图视图样式的选项。导航视图还支持强制使用深色模式。由于屏幕类型差异,这可能不会以相同的方式影响每个设备,但在某些情况下可以节省电量。最近的一项研究发现,某些屏幕上深色模式所节省的电量取决于屏幕的初始亮度。例如,与亮度已调节到最大亮度的 30-50% 相比,深色模式在设为全亮度的屏幕上节省了更多电量。为应用使用深色模式时请务必注意这一点,因为省电取决于最终用户设置屏幕亮度的方式。

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

在采用深色地图样式的 iPhone 15 Pro 上运行的 Navigation SDK 的屏幕截图。
图 3. 配置了深色地图样式的 Navigation SDK

如需为地图创建深色样式,请使用 MapStyleOptions 对象和 JSON 样式,该样式表示您选择的深色地图样式。您可以使用旧版样式编辑器 (https://mapstyle.withgoogle.com/) 创建旧版 JSON 样式。

更改 GPS 位置信息更新频率

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

您无法在 Navigation SDK 中直接控制此功能,但如果您的 Android 应用独立请求位置信息,则应考虑 Android 开发者文档中优化电池的位置一文中的建议。 上述建议同样适用于使用非 GPS 位置源(手机和 Wi-Fi)的情况。

指导用户

应用的用户可能希望了解如何优化其功耗。为了帮助用户降低其应用的功耗,请建议用户执行以下操作:

  • 锁定手机
  • 将导航应用置于后台
  • 尽可能使用无地图导航
  • 通过对 OLED 和 AMOLED 屏幕使用深色模式,或者启用自适应亮度来降低屏幕亮度。
  • 让设备保持低温
  • 连接到车载 Wi-Fi(如果有)
请参阅充分利用 Android 设备的电池续航时间,获取有关延长 Android 电池续航时间的最终用户建议。请注意,如本指南的优化应用的功耗部分所述,这些建议包括可能会使导航应用性能下降的操作。

测量功耗

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

您可以使用特殊用途的电源监控硬件并修改电池连接配置,我们现有的商业产品和服务可帮助您实现这一目标。请注意,以这种方式修改设备可能会使设备的保修失效。