本文档介绍了如何使用 Navigation SDK 构建的移动导航应用中优化功耗的最佳实践。同时,还介绍了在采用这些做法时需要考虑的权衡。具体而言,本文档介绍了以下内容:
- 高功耗的来源,按从高到低的顺序排列。
- 优化功耗的策略,按重要性排序,从帧速率开始。
- 最终用户策略:指导应用用户如何在导航时管理设备使用情况。
为何优化导航应用?
根据具体情况,您的应用用户可能会长时间运行导航指示。例如,司机和快递员可能需要长时间工作,在陌生的地方完成任务。在这种情况下,他们非常依赖于应用内精细导航。这会导致一些典型问题:
- 电池电量耗尽和充电器的供应情况。导航使用量过多可能会导致设备电池耗电速度超出预期。虽然许多用户可以在车内为设备充电来解决此问题,但两轮车驾驶员却无法这样做。
- 设备因过热而受限。即使用户一直为设备充电,也可能会遇到问题。长时间的高功耗可能会导致设备发热,进而导致温控降频和随后的性能下降。
精细导航应用依赖于耗电量较高的功能,例如屏幕、GPS 和与基站的无线通信,因此最佳实践是优化移动应用的电源用量。此外,您应考虑目标受众群体的电源用量需求,以便在性能和优化功耗之间做出适当的权衡。
哪些功能的耗电量最大?
本部分将与高功耗相关的应用内活动分为两类:
- 屏幕呈现
- 位置信息动态
屏幕呈现
在移动导航应用中,屏幕渲染通常会导致最高的功耗。每当设备在屏幕上绘制地图和其他界面元素时,都需要依赖 GPU 和 CPU 处理。同样,如果用户长时间让该屏幕保持开启状态,也会消耗更多电量。
在某种程度上,您可以预料到,依赖于可见地图进行导航的司机或乘客会产生较高的功耗,尤其是在他们连续使用应用数小时时。在此场景中,应用在屏幕上的渲染速率也会更高,因为地图会实时更新。在某些情况下,屏幕几乎可以连续重新绘制,尤其是当用户从一个位置驾车到另一个位置且不停车时。
位置信息动态
除了屏幕渲染之外,还有两个导航 activity 会耗用设备电量:
- 无线电基站和 GPS 使用情况
- 位置信息更新和分享,例如提供预计到达时间或报告车队中车辆的位置。
GPS 和蜂窝无线通信都依赖于耗电量高的启动操作:GPS 必须找到卫星,蜂窝无线电必须与塔进行协商并建立连接。因此,即使小区无线装置会保持 20-30 秒的活动状态以尽量减少启动费用,它们在导航期间实际上也会持续运行。操作系统会控制这些设置,您无法在应用中轻松配置这些设置。
对于位置信息更新,功耗因不可预测的因素而异。例如,设备与移动网络基站之间的距离决定了功耗,因为设备会使用尽可能少的信号来继续导航,以避免切换信号塔。因此,在网络连接较差的区域导航的设备比靠近基站的设备会消耗更多电量。此外,某些应用可能会与中央车队管理服务共享位置信息更新,因此需要与服务器通信才能实现此目的。
优化应用的电量消耗
优化导航应用中的功耗是一项具有挑战性的任务,因为这些应用严重依赖于耗电量高的资源,这会限制您在没有做出限制屏幕使用等权衡的情况下,减轻影响的选项。本部分列出了优化应用时可采用的方法,按影响力从高到低的顺序排列。
更改帧速率
屏幕会以帧速率更新其显示的内容。 帧速率通常以每秒帧数 (FPS) 为单位。由于屏幕渲染会大量使用 CPU 或 GPU,因此您可以降低帧速率以节省功耗。
降低帧速率的代价是,屏幕渲染可能会不太流畅,尤其是在地图频繁更新时。当地图放大以显示高细节时、用户高速行驶时,或大幅度更改速度或方向时,这种情况最为明显。
如需详细了解如何修改帧速率,请参阅 Android 媒体开发者中心开发者文档中的帧速率部分。
无需地图即可导航
虽然您无法控制最终用户如何设置设备屏幕亮度或屏幕开启时长,但您可以提供不使用地图的导航指引选项。这样,最终用户就可以选择该选项以节省电量。例如,如果司机经常在同一社区工作,则可能不需要那么频繁地使用基于地图的导航。如需启用不显示地图的导航功能,您可以在 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 引发的所有事件。这并不适用于所有用例,当然,在驾驶员需要查看地图并遵循视觉引导的情况下,这也不是一个好建议。以下屏幕截图对比展示了在有效导航期间切换地图视图的情况。
使用深色地图样式
考虑为地图设置深色主题,以减少在屏幕上渲染地图所需的电量。
Navigation SDK 使用 Google Maps SDK for Android 渲染地图,其中包含用于设置应用中所有非导航地图视图样式的选项。导航视图还支持强制使用深色模式。由于屏幕类型不同,这可能不会对每部设备产生相同的影响,但在某些情况下,确实可以节省电量。一项近期研究发现,某些屏幕上的深色模式可节省的电量取决于屏幕的初始亮度。例如,与亮度已调节到最大亮度的 30-50% 的屏幕相比,在设为全亮度的屏幕上启用深色模式可节省更多电量。在为应用使用深色模式时,请务必考虑这一点,因为节省的电量将取决于最终用户设置屏幕亮度的方式。
如需详细了解如何修改 Navigation 界面,请参阅修改 Navigation 界面。
如需为地图创建深色样式,请将 MapStyleOptions 对象与表示您选择的深色地图样式的 JSON 样式搭配使用。您可以使用旧版样式编辑器 (https://mapstyle.withgoogle.com/) 创建旧版 JSON 样式。
更改 GPS 位置信息更新频率
在考虑从设备发送的位置信息更新带来的功耗时,请重点关注位置信息更新的频率,而不是传输中发送的数据量。
您无法直接在 Navigation SDK 中控制此设置,但如果您的 Android 应用独立请求位置信息,则应考虑 Android 开发者文档中“针对电池优化位置信息”一文中的建议。 同样的建议也适用于使用非 GPS 位置信息来源(移动网络和 Wi-Fi)。
为您的用户提供更多相关信息
应用用户可能希望了解如何优化功耗。为帮助用户降低应用的电量消耗,请建议用户执行以下操作:
- 锁定手机
- 将导航应用置于后台
- 尽可能在不使用地图的情况下使用导航
- 降低屏幕亮度,方法是针对 OLED 和 AMOLED 屏幕使用深色模式,或启用自适应亮度
- 让设备保持凉爽
- 连接到车载 Wi-Fi(如果有)
测量功耗
您可以使用专业级工具来测量功耗,但这些工具通常很难获得,或者成本很高。应用和 IDE 性能分析工具(例如 Android Studio 中的功耗性能分析器和 XCode Organizer 中的“电池用量”窗格)可测量功耗,但很难消除后台进程的影响或设置用于衡量的基准性能。在某些情况下,设备限制可能会阻止您访问必要的数据。
您可以使用专用电源监控硬件并修改电池连接配置,并且有商用产品和服务可帮助您实现这一点。请注意,以这种方式修改设备可能会导致设备保修失效。