Table of Contents
电池寿命仍然是移动设备可用性中最关键的因素之一,对于全天依赖iOS应用的用户来说尤其如此。 随着应用程序的功能更加丰富,对持续处理、网络活动和高分辨率图形的需求增加,导致电池排水速度加快。这不仅会令用户感到沮丧,而且会导致保留率降低和负面评论。 幸运的是,既有的最佳做法和现代iOS API的结合,可以让开发者在不损害应用程序性能的情况下大量降低能量消耗。 本文探讨了iOS应用中电池排水的主要来源,并为在持续使用期间优化电池寿命提供了可操作的战略。
了解iOS Apps中的电池消耗
为了优化电池寿命,开发者必须首先了解iOS应用程序如何消耗电量. 几乎每个设备上的操作都从电池中汲取能量,但有些活动比其他活动要求要高得多. 电池消耗的主要类别包括: 电池消耗量 :
- Display和Backlight:[] 屏幕经常是最大的功耗,高亮度,长屏幕上的时间,以及动画频繁的重绘或低效的UI更新,都增加了排水量.
- 网络活动:[] 手机调制解调器和Wi-Fi无线电在传输或接收数据时使用显著的功率. 频繁,小型的网络呼叫特别低效,因为每次会话的无线电必须再次供电,连接和供电.
- 背景任务: 继续在背景中运行进程的App——如位置更新,背景获取,或VoIP连接——可以防止设备进入低功率状态.
- CPU和GPU负载: 复杂的计算,重图形渲染,以及过量的环路使处理器保持活动,绘图功率与负载成比例.
- 传感器使用: 持续访问GPS,加速计等传感器,或麦克风可以迅速排出电池,特别是如果应用不管理采样率或使用正确的精度.
确定这些组件中哪些是您的应用软件中的首要罪犯,需要使用工具如Xcode的“仪器中的能量诊断”标签进行剖面分析。 能量记录显示,随着时间推移,CPU的使用、网络活动和位置使用都详细细分,从而能够进行有针对性的优化。
开发者关键战略
有效的电池优化需要分层操作:使用节能API,减少不必要的工作,尊重系统电态。 下面是需要持续使用的应用软件最有影响力的技术。
尽量减少背景活动
背景执行是一大电池排水. iOS 提供了几种背景工作机制, 但每个机制都应该明智地使用. [[FLT: 0]] 背景获取[[FLT: 1]] 允许应用定期下载少量数据, 但频率由系统管理. 如果不需要背景更新, 请将 [[FLT: 0] 设定为最大可接受的间隔( 如 [[FLT: 1]] ) 。 对于真正需要背景完成的任务, 请使用 [[FLT: 2]] 背景任务(BGTaskScheduler) [FLT: 3] 而不是让应用保持生命。 这个API 将工作推迟到系统有足够的能量预算时进行, 减少对用户- 未来活动的干扰 。
如果您的应用软件使用定位服务, 请选择适当的精确度。 与其不断更新高精确度的 GPS , 请使用 [ [FLT: 0] 区域监测 [[FLT: 1] 或 [[FLT: 2] 重大改变定位服务 [[FLT: 3] 进行粗糙的定位跟踪 。 例如, 健身软件只需知道用户进出公园时就可以使用区域监测, 其效率远高于持续的 GPS 投票。 另外, 考虑将 [ [[FLT: 2] 属性设置为 [[FLT: 3] 至 [[FLT: 4]] —— 这告诉iOS 优化行人或骑行步的功率 。
优化网络使用
网络操作是巨大的电池排水,尤其是蜂窝。
- Batch网络请求: 与其将许多小API呼叫,总数据变为更少,更大的请求,当无线电可以发送突发的数据然后闲置时,在大功率传输模式下花费的时间更少.
- 使用渐进下载: 对于像图像或视频文件这样的大资产,只下载立即需要的数据. 使用范围(HTTP Range Request)或大小感知API.
- 允许 HTTP / 2 或 QUIC:[] 这些协议减少连接的间接费用,允许多流流,降低每个请求的能量消耗.
- 正确使用NSURL会议: 使用背景会话进行即使该应用程序被暂停仍应继续的传输。前瞻会话,适当设置,并使用,以避免在连接不良时重复。
- 压缩有效载荷:[在服务器一侧使用gzip或Brotli压缩,数据较小会减少传输时间和无线电功率.
考虑使用 推告[ 而不是投票。推告更能节能,因为系统对所有应用维持单一的持久连接,而且应用程序只有在新数据到达时才会醒悟。对于非关键更新,使用远程通知[(低音推)的后地推,因为其仍消耗处理的动力。
高效代码执行
无效算法和过多的CPU使用是隐藏的电池排水管。 将您的代码配置为 [[FLT: 0]] Xcode 的时间配置器[[[FLT: 1]] , 以识别热点。 常见的问题包括:
- 不必要的投票循环:[ 只有在不可避免的情况下才使用计时器;更喜欢代表调回或调回,即系统在条件变化时会起火.
- 主线上重力计算:[ 卸载工作到背景队列(使用[或]]),以保持主跑循环自由,用于UI更新.
- 懒散加载: 只有在需要时才装入资源(图像,数据模型,视图控制器),而不是在应用启动时预先装入所有东西.
- 简化对象创建的机上: 在可能情况下重新使用对象,特别是在紧环中(例如,在从传感器处理数据时).
对于Core ML推断或金属遮蔽器执行等高频操作,iOS设备具有比CPU更高效得多的专用硬件(Neural Engine,GPU). 保证您正在使用最合适的API来完成工作量——例如使用Devicec Check 或ARKit]硬件加速比基于定制CPU的解决方案更好.
功率 APIs
iOS提供多个专为低功耗设计的API. 使用这些功能可以自动保存电池而无需自定义优化:
- 背景配置为:]的NSURLSED,如上所述,它处理的传输过程是单独进行的,其功率密集度低于前置活动.
- AVCAPSY -.photo 输出: 在使用相机时,选择]预设的静态图像而不是视频——视频需要连续的传感器读取和处理,这需要快速排水.
- Core Location – 推迟更新: 在背景运行时,可以通过使用来推迟位置更新. 此批次更新为更少的醒悟.
- 能量仪表板: 使用] 当用户启用了低功率模式时,可以调整应用行为. 减少动画,降低帧率,禁止非必要的同步,或切换到质量较低的资源.
利用硬件优化
现代iPhone包括电源管理硬件,如M系列运动协处理器[]和专用编码器/解码器. 尽可能将数据处理卸载到这些单元中. 例如,使用硬件加速的H.264/H.265编码而不是软件编码. 同样,Core ML模型可以通过设备类型运行在神经引擎上进行推导,该类型使用GPU或CPU的一小部分功率.
也考虑 图像处理的金属性能遮荫器[——它们运行在GPU上,相对于CPU,平行工作量的节能性能更高. 总是在物理设备上进行测试,因为模拟器没有精确地模拟动力行为.
用户提示和设置
虽然开发者控制了大部分的功耗,但用户在重度应用时也有延长电池寿命的选择. In-app 提示可以引导用户更好地设置:
- 下屏幕亮度: 鼓励用户手动降低亮度或启用自动亮度(Settings > Display & Brightness).
- Enable Low Power Mode: 在他们期望持续使用时建议启用Low Power Mode(Settings > Battery). 系统将自动减少背景活动和性能.
- REduce刷新速率: 对于带有Promotion(120Hz显示)的设备,用户可以在设置 > 无障碍 > Motion > 限制帧速率中将帧速率限制为60Hz. Apps也可以在不需要时通过取消120Hz动画来尊重这一点.
- 关闭不必要的应用: 虽然iOS处理多任务效率高,但背景应用仍然消耗一些资源. 建议用户刷去他们不积极使用的应用.
- 关闭不必要的服务: 蓝牙、无线和位置服务在不需要时可以关闭。对于位置,用户可以设置应用权限,以“同时使用”而不是“永远使用 ” 。
您也可以在您的应用程序中添加一个 低功率模式检测 , 以自动降低资源使用率( 如降低视频质量, 暂停同步, 降低投票频率) 。 将这些变化清楚地传达给用户, 让他们理解权衡。
结论
优化iOS应用程序中的电池寿命并不是一次性任务,而是需要了解硬件、系统服务和应用码之间相互作用的持续过程。通过早期剖析,使用高效电源API,尽量减少背景工作,并尊重用户的电源管理选择,开发者可以创建提供出色的连续使用体验的应用程序,而无需耗尽电池。这些做法提高了用户的满意度,减少了热量,并有助于设备在充电之间持续的时间更长。关于进一步的细节,请参考苹果公司关于[能源诊断[和App生命周期的正式文件,以及Battry State API。对于更广泛的最佳做法,iOS Apps[的能源效率指南仍然是一项必不可少的资源。