性能优化04:Energy 耗电

张建 lol

概述

所有应用程序在执行网络操作、更新用户界面或在CPU上运行代码时都会消耗能量。随着用户越来越多地依赖电池电量,以及应用程序的激增,能效已成为用户体验中不可或缺的一部分。

电池寿命

随着能源效率的下降,电池 的寿命也会下降。同时消耗过多的资源会导致界面滞后,对用户输入的响应会很慢。随着越来越多的应用程序使用越来越多的资源,系统工作起来越来越努力,速度也越来越快,设备的物理温度也在逐渐升高。当这种情况发生时,系统会采取措施将温度降低到更容易接受的水平。

能量消耗的因素

  1. CPU: CPU是能源的主要消耗者。高CPU使用周期会迅速耗尽用户的电池。 CPU使用率超过20%就会快速耗干电池电量——建议只在必要时通过 批处理、调度和优先级排序 来完成工作。

  2. GPU: 图形处理器(显卡的处理器),乱使用GPU会导致交互差,并且降低电池寿命。

  3. Network:大多数iOS应用程序执行网络操作。当联网发生时,蜂窝无线电和Wi-Fi等组件就会启动并消耗能量。通过 批量处理和减少事务、压缩数据和适当处理错误,您的应用程序可以为节能做出重大贡献。

  4. Location: 许多应用程序发出位置请求是为了记录用户的物理活动或提供基于环境的警报。能量消耗随着精确度的提高和位置请求的延长而增加。你的应用应该尽可能减少定位活动的准确性和持续时间。当不再需要时停止位置请求。

  5. Background: 后台 状态App仍会消耗电量,App要按需执行后台操作,并使用延迟APNS来保证系统运算高效执行。另外,在app进入后台状态是,立即减少动作,并且通知系统一次这些动作已经完成

  6. Bluetooth: 长时间的 蓝牙 活动会耗尽iOS设备和蓝牙设备的电池。只要可能,批处理和缓冲蓝牙活动,并减少对数据的轮询。

  7. Device wakes:iOS设备依靠睡眠来延长电池寿命。无论设备何时唤醒,都会有很高的开销成本,因为必须为屏幕和其他资源提供电源。你的应用程序,尤其是在后台操作时,应该尽可能空闲,除非绝对必要,避免用推送通知或其他活动唤醒设备

分析工具

  1. Time Profile:时间分析器分析模板。使用此模板对正在运行的进程执行低开销的基于时间的采样。Time Profiler 监视应用程序中正在运行的线程,并定期采样。为每个样本收集完整的回溯,允许您深入查看样本,以准确找到代码中花费大量时间的位置。

  2. Animation Hitches:核心动画分析模板。使用此模板可以测量图形性能和CPU使用率。启用模板 Core Animation 的 Flash Updated Regions 设置,以查看应用中发生的每个屏幕更新,并观察不必要或意外的更新。

  3. Activity Monitor: 活动监视器分析模板。使用此模板可以监视整体CPU,磁盘I/O和网络使用情况。

Energy log调试和演示

  1. 检查第一步,是通过xcode开发工具的 energy impact 来整体查看app的耗电情况。

Overhead:表示开销,包括CPU的唤起,无线电模组(蓝牙&WiFi),和其他系统资源的调用等。

  1. 检查第二步:通过instrument工具的 energy log 来检测具体的耗电模块。

耗电优化

  1. cpu层面的优化
  • 尽量降低CPU
  • 少使用定时器
  • 优化I/O操作
    • 写入数据最好一次性写入
    • 读取数据最好使用GCD异步操作
    • 数据流比较大,建议使用数据库
  • 适当使用多线程,不宜过多,不要阻塞主线程
  • 优化算法,减少循环次数
  • 避免庞大的 xib、storyBoard, 尽量使用纯代码开发
  1. GPU 层面的优化
  • 减少视图刷新,按需刷新;
  • 尽量少使用圆角和透明度;
  1. Network 网络请求层面的优化
  • 减少、压缩网络数据
  • 如果多次请求的结果是相同的,尽量使用缓存
  • 使用断点续传,否则网络不稳定时可能多次传输相同的内容
  • 网络不可用时,不要尝试执行网络请求
  • 让用户可以取消长时间运行或者速度很慢的网络操作,设置合适的超时时间
  • 批量传输,比如,下载视频流时,不要传输很小的数据包,直接下载整个文件或者一大块一大块地下载
  1. Location 定位层面优化
  • 如果只是需要快速确定用户位置,最好用CLLocationManager的requestLocation方法。定位完成后,会自动让定位硬件断电
  • 如果不是导航应用,尽量不要实时更新位置,定位完毕就关掉定位服务
  • 尽量降低定位精度,比如尽量不要使用精度最高的kCLLocationAccuracyBest
  • 需要后台定位时,尽量设置pausesLocationUpdatesAutomatically为YES,如果用户不太可能移动的时候系统会自动暂停位置更新
  • 尽量不要使用startMonitoringSignificantLocationChanges,优先考虑startMonitoringForRegion
  1. Bluetooth, Background
  • 蓝牙按需取用,定位之后要关闭或降低定位频率,进入后台关闭定位,停止定时器运行等
  1. 硬件检测优化(不常用)
  • 用户移动、摇晃、倾斜设备时,会产生动作(motion)事件,这些事件由加速度计、陀螺仪、磁力计等硬件检测。在不需要检测的场合,应该及时关闭这些硬件
  • Post title:性能优化04:Energy 耗电
  • Post author:张建
  • Create time:2023-09-10 12:13:29
  • Post link:https://redefine.ohevan.com/2023/09/10/OC性能优化/性能优化04:Energy 耗电/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.