• 主页
  • 随笔
  • 技术笔记
  • 全部文章
标签 友链 关于我

  • 主页
  • 随笔
  • 技术笔记
  • 全部文章

iOS应用程序的能源效率指南

阅读数:次 2021-12-20
字数统计: 1.1k字   |   阅读时长≈ 3分

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

一、良好的用户体验需要:

  • 电池续航能力很好。随着能源效率的下降,电池续航能力也会下降。用户希望其iOS设备上的电池续航时间为全天。
  • 速度惊人。iOS旨在在复杂的操作中提供出色的性能,并使您的应用程序飞起来。
  • 反应灵敏。一次消耗过多的资源可能会导致界面滞后,对用户输入的反应缓慢。
  • 酷炫的体验。随着越来越多的应用程序使用更多资源,系统工作越来越努力,设备的物理温度也逐渐上升。当这种情况发生时,系统会采取措施冷却到更可接受的水平。

二、耗电原因?

CPU 是耗电操作

  • 引起 CPU 耗电的单点问题可以通过监控来解决,但点滴汇聚终成大海,每一个不合理的小的电量消耗,最终都可能会造成大的电量浪费。
    对 CPU 的使用要精打细算,要避免让 CPU 做多余的事情。

  • 对于大量数据的复杂计算,应该把数据传到服务器去处理,如果必须要在 App 内处理复杂数据计算,可以通过 GCD 的 dispatch_block_create_with_qos_class 方法指定队列的 Qos 为 QOS_CLASS_UTILITY,将计算工作放到这个队列的 block 里。在 QOS_CLASS_UTILITY 这种 Qos 模式下,系统针对大量数据的计算,以及复杂数据处理专门做了电量优化。

I/O 耗电操作

任何的 I/O 操作,都会破坏掉低功耗状态 优化方案:

  • 业内的普遍做法是,将碎片化的数据磁盘存储操作延后,先在内存中聚合,然后再进行磁盘存储。碎片化的数据进行聚合,在内存中进行存储的机制,可以使用系统自带的 NSCache 来完成。

  • NSCache 是线程安全的,NSCache 会在到达预设缓存空间值时清理缓存,这时会触发 cache:willEvictObject: 方法的回调,在这个回调里就可以对数据进行 I/O 操作,达到将聚合的数据 I/O 延后的目的。I/O 操作的次数减少了,对电量的消耗也就减少了。

示范场景:
SDWebImage 图片加载框架,在图片的读取缓存处理时没有直接使用 I/O,而是使用了 NSCache。

三、如何优化电量?

苹果公司专门维护了一个电量优化指南 “Energy Efficiency Guide for iOS Apps”,分别从 CPU、设备唤醒、网络、图形、动画、视频、定位、加速度计、陀螺仪、磁力计、蓝牙等多方面因素提出了电量优化方面的建议。

1.减少工作并优先排序

1.1 减少后台工作:

  • 后台活动完成后没有通知系统
  • 播放无声音频
  • 执行位置更新
  • 与蓝牙配件交互
  • 可以推迟的下载

1.2 尽量减少计时器的使用

  • 计时器的高成本
  • 无需使用计时器即可获取事件通知
  • 使用GCD工具进行同步,而不是计时器
  • 如果您必须使用计时器,请高效使用它

1.3 尽量减少I/O

  • 尽量减少数据写入
  • 避免太频繁地访问内存
  • 尽可能按顺序读取和写入数据
  • 了解系统如何缓存文件数据

2.网络变量对能源的影响

  • 蜂窝网络活动比Wi-Fi活动需要的能量要多得多
  • 网络吞吐量,过多频繁的网络请求
  • 降低媒体质量和大小,压缩数据

3.高效使用图形,动画,视频

  • 减少应用程序使用的视图数量
  • 减少不透明度的使用
  • 尽可能对动画使用较低的帧速率
  • 避免在屏幕上同时使用多个帧速率

4.尽量减少外围互动

  • 仅在需要时扫描设备
  • 尽可能减少收音机的使用
  • 蓝牙设备消耗能源
  • 本文作者: Grx
  • 本文链接: https://ruixiaoguo.github.io/Grx.github.io/Grx.github.io/2021/12/20/iOS应用程序的能源效率指南/
  • 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!
  • OC

扫一扫,分享到微信

今年最值得关注的 23 种新移动技术
谈一谈LLVM编译器
  1. 1. 一、良好的用户体验需要:
  2. 2. 二、耗电原因?
    1. 2.1. CPU 是耗电操作
    2. 2.2. I/O 耗电操作
      1. 2.2.0.1. 示范场景:
      2. 2.2.0.2. SDWebImage 图片加载框架,在图片的读取缓存处理时没有直接使用 I/O,而是使用了 NSCache。
  • 3. 三、如何优化电量?
    1. 3.1. 1.减少工作并优先排序
      1. 3.1.1. 1.1 减少后台工作:
      2. 3.1.2. 1.2 尽量减少计时器的使用
      3. 3.1.3. 1.3 尽量减少I/O
    2. 3.2. 2.网络变量对能源的影响
    3. 3.3. 3.高效使用图形,动画,视频
    4. 3.4. 4.尽量减少外围互动
  • © 2014-2024 Grx
    GitHub:hexo-theme-yilia-plus by Litten
    本站总访问量次 | 本站访客数人
    • 标签
    • 友链
    • 关于我

    tag:

    • life
    • OC
    • Google
    • Fastlane
    • Flutter
    • hexo
    • 智能家居
    • Apple Watch
    • 逆向
    • Lottie
    • PHP
    • cocos2d
    • Mac
    • MonkeyKing
    • RN
    • Swift
    • RAC
    • WKWebView
    • WebView
    • Xcode
    • xcode
    • ios
    • Android
    • appledoc
    • MMKV
    • LLVM
    • FreamWork






      
      

    • 唐巧的博客
    • 王巍(喵神)OneVsDen
    • 阿里“念纪“
    • 滴滴-戴铭
    • 郭曜源(ibireme)
    • 阿里”南栀倾寒“
    • 蘑菇街李忠
    • 码农人生
    • 玉令天下
    • bang
    • Ian的博客
    这里是Grx的个人博客:
    iOS开发工程师一枚
    联系方式:
    QQ:1217255509
    Email:grx0917@sina.com
    知识管理,时间管理,自我管理,架构即未来
    欢迎技术交流!