优化应用的功耗

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

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

为什么要优化导航应用?

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

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

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

什么最耗电?

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

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

屏幕呈现

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

在一定程度上,您可以预期依赖可见地图进行导航的司机或骑手会消耗大量电量,尤其是当他们连续使用应用数小时时。在这种情况下,应用在屏幕上执行的渲染速率也会更高,因为地图会实时更新。在某些情况下,屏幕几乎可以持续重绘,尤其是当用户不停地从一个地点开车到另一个地点时。

位置信息动态

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

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

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

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

优化应用的功耗

优化导航应用功耗的挑战在于,这些应用严重依赖耗电量大的资源,这限制了您在不做出限制屏幕使用等权衡取舍的情况下减轻影响的选择。本部分提供了一个列表,列出了您在优化应用时可以采取的方法,按影响从大到小的顺序排列。

更改帧速率

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

降低帧速率的权衡取舍是,屏幕呈现可能会显得不那么流畅,尤其是在地图频繁更新的情况下。当地图放大时、用户高速行驶时,或者大幅改变速度或方向时,这一点可能最为明显。

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

虽然您无法控制最终用户如何设置设备屏幕亮度或保持屏幕开启的时间,但您可以提供在没有地图的情况下进行导航指引的选项。 这样,最终用户就可以选择该选项来节省电量。例如,如果司机经常在同一社区工作,他们可能不需要经常使用基于地图的指引。在没有地图的情况下进行导航可以通过在 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 演示版应用,显示了数据返回 演示版
演示版应用正在运行,但未显示任何地图视图。
图 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 中的 Power Profiler 和 XCode Organizer 中的 Battery Usage 窗格)可以衡量功耗,但很难 消除后台进程的影响或设置性能基准以 进行衡量。在某些情况下,设备限制可能会阻止您访问必要的数据。

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