优化应用的功耗

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

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

为什么要优化导航应用?

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

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

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

哪些因素最耗电?

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

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

屏幕呈现

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

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

位置信息动态

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

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

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

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

优化应用的耗电量

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

更改帧速率

屏幕会以一定的频率(称为帧速率,通常以每秒帧数 [FPS] 为单位)更新其显示的内容。由于屏幕渲染会消耗大量 CPU 和 GPU 处理资源,因此您可以降低帧速率以节省电量。

降低帧速率后,地图渲染和互动手势(例如平移、缩放或旋转)可能会显得不那么流畅。为了在能效与响应迅速的用户体验之间取得平衡,您可以保持较低的基准帧速率,并在用户主动互动期间动态提高帧速率。

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

自动调整帧速率

从 7.8.0 版开始,Navigation SDK 会在主动导航期间自动调整地图的帧速率,以提升性能并降低电池消耗。当设备进入节能模式时,地图的帧速率会降至 10 FPS,并在导航结束或节能模式停用时重置为 60 FPS。

虽然您无法控制最终用户如何设置其设备屏幕亮度或屏幕保持开启的时长,但您可以提供不使用地图的导航路线选项。这样,最终用户就可以选择该选项来节省电量。例如,如果司机经常在同一区域工作,他们可能不需要频繁使用地图导航。如需启用无地图导航,您可以在 Navigation SDK 中设置目的地并开始导航,但不显示地图。

如需隐藏导航界面,请勿添加 NavigationView 或 SupportNavigationFragment;如果您已经添加了这些内容,请移除添加它们的代码。以下代码修改自 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% 的屏幕相比,深色模式在设置为全亮度的屏幕上更省电。在为应用使用深色模式时,请务必考虑这一点,因为省电效果与最终用户设置的屏幕亮度有关。

如需详细了解如何修改 Navigation 界面,请参阅修改 Navigation 界面。

在 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 中的电池用量窗格)可测量功耗,但可能很难消除后台进程的影响或设置性能基准来进行测量。在某些情况下,设备限制可能会阻止获取必要的数据。

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