美文网首页
iOS应用程序能效指南

iOS应用程序能效指南

作者: 夜沐月 | 来源:发表于2020-04-20 15:21 被阅读0次

    能效与用户体验

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

    良好的用户体验需要:
    • 电池续航时间很长。随着能源效率的下降,电池寿命也随之下降。用户希望其iOS设备的电池寿命为一整天
    • 惊人的速度。iOS的设计是为了在复杂的操作过程中提供出色的性能,并让你的应用飞起来。
    • 响应性。同时消耗太多资源会导致界面滞后,响应用户输入的速度很慢
    • 低温的设备。随着越来越多的应用程序使用更多的资源,系统工作得越来越努力、越来越快,设备的物理温度也逐渐升高。当这种情况发生时,系统会采取措施冷却到更可接受的水平。

    iOS节能技术

    iOS采用先进的节能技术,帮助用户充分利用设备。这些特性有助于系统在如何尽可能有效地使用资源和运行代码方面做出明智的决策

    集成硬件和软件

    iOS集成了先进的硬件功能,如节能CPU加速图形无线天线。硬件和软件一起工作,以提供优化的用户体验,这对电池寿命是很好的。

    智能应用管理

    iOS应用程序的生命周期由系统管理。当用户完成与某个应用程序的交互时,该应用程序将被置于后台状态,其中活动将被限制,并且该应用程序可能被挂起。在后台运行时长时间产生高CPU使用率的应用程序,如有必要,可由系统终止。

    网络运营延期

    api允许您指定指示何时和多久应延迟一次网络操作、可以延迟多长时间以及在什么情况下延迟的条件。系统使用此信息将操作推迟到节能时间。

    询问优先级

    影响用户的任务,如下载和播放音乐,优先于背景和自由裁量的工作。服务质量类api允许您为应用程序执行的工作分配优先级,从而对任务优先级进行细粒度控制

    开发人员工具

    Xcode和Instruments帮助您在开发应用程序时识别和解决能源问题,而不是在用户遇到这些问题之后。

    你作为开发商的义务

    应用程序中的低效率的增加会显著影响电池寿命、性能和响应能力。作为应用程序开发人员,您有义务确保您的应用程序尽可能高效地运行。使用推荐的api,以便系统能够明智地决定如何最好地管理应用程序及其使用的资源。只要有可能,批处理和减少网络操作,并避免对用户界面进行不必要的更新。功率密集型操作应由用户控制。例如,如果用户正在玩一个重图形的游戏,那么如果该活动消耗了能量,用户就不会感到惊讶。努力让你的应用程序在没有响应用户输入时完全空闲。
    通过遵循推荐的指导原则,您可以为平台的整体能效和用户的满意度做出巨大贡献。

    基本概念

    在设备上没有单一的节能解决方案。许多技术和操作影响能源的使用:

    CPU

    CPU是能源的主要消耗者。高CPU使用时间会迅速耗尽用户的电池。你的应用程序几乎做任何事情都使用CPU,它应该明智地这样做,只在必要时通过批处理、调度和优先级排序来完成工作。

    设备唤醒

    iOS设备依靠睡眠来延长电池寿命。每当设备唤醒时,由于屏幕和其他资源必须通电,因此会产生很高的开销。你的应用程序,特别是在后台操作时,应该尽可能空闲,除非绝对必要,否则不要用推送通知或其他活动唤醒设备。

    网络操作

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

    图形、动画和视频

    每次你的应用程序在屏幕上更新内容时,它都会消耗能量来生成这些像素。动画片和视频可能会特别费劲。意外和不必要的内容更新也会耗尽电源。当用户看不到你的应用程序的界面时,它应该避免更新内容。此外,请遵循iOS人机界面指南中图形和动画下的建议指南。

    定位

    许多应用程序都会发出位置请求,以便记录用户的物理活动或提供基于环境的警报。随着更高的精度和更长的定位要求,能源消耗也在增加。你的应用程序应该尽可能减少定位活动的准确性和持续时间。不再需要时停止位置请求。

    运动

    对加速度计、陀螺仪、磁强计等运动数据的连续无根据要求浪费能量。仅在必要时请求运动更新,在不再需要数据时停止更新。

    蓝牙

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

    能源与动力

    能量和功率是两个独立但相关的概念。功率是对任何给定时间点所需能量的瞬时测量(瓦特)(图2-1)。能量是对一段时间内(瓦时)所用功率(焦耳)的测量。能量是有限的。它储存在电池中,随着时间的推移,需要更多的电力消耗。


    2-1_energy-is-power-over-time_2x.png

    通过在开发应用程序时意识到能量并将其考虑在内,您可以主动采取措施提高代码的效率。随着越来越多的应用程序提高了效率,除了更凉爽、更安静的设备外,用户的电池续航时间也会更长。

    CPU使用率和功耗

    CPU的使用是昂贵的。随着更多的CPU被使用,更多的电力消耗,更多的能源被使用,设备的电池消耗更快。功率消耗因设备、处理器、资源等而异,但表2-1提供了不同CPU使用率与空闲状态的粗略比较。
    本文档中的大多数技术和建议都会减少CPU的使用

    Table 2-1Example of idle vs. CPU power draw

    空闲 睡眠时耗电量增加10倍
    1%的CPU使用率 怠速时功率消耗增加10%
    10%的CPU使用率 2倍闲置功耗
    100%CPU使用 10倍闲置功耗

    固定消耗与动态消耗

    iOS非常擅长让设备在不使用时进入低功耗状态。即使是在微秒级,例如在按键之间,系统也能够关闭未使用的资源。
    在空闲时,只消耗很少的能量,能量影响很小。当任务正在进行时,系统资源正在被使用,而这些资源需要能量。但是,零星的任务会导致设备在不做任何事情时进入中间状态,既不空闲也不活动。在这些中间状态期间,设备可能没有足够的时间在执行下一个任务之前达到绝对空闲状态。当这种情况发生时,能量被浪费,用户的电池消耗得更快。
    你的应用执行的任务会动态消耗你的应用通过实际工作消耗的能量。他们也有一个固定的消耗多少能源是通过使系统和各种资源上升,以便您的应用程序做的工作,并在工作完成后回落。当大量零星工作发生时,也会产生动态消耗和显著的固定消耗,因为资源可能永远无法在零星任务之间达到真正的空闲状态。这种情况导致大量的能量被用于相对较少的实际工作。见图2-2。

    在iOS中,网络有很高的固定成本。无论何时联网,蜂窝无线电和Wi-Fi都必须通电。在期待额外的工作时,这些资源会持续运行并长时间消耗能量,即使在你的工作完成之后。
    
    2-1_energy-is-power-over-time_2x.png

    固定消耗交易动态消耗

    你的应用程序可以避免零星的工作,批处理任务和执行它们的频率较低。例如,不要在同一个线程上执行一系列连续的任务,而是将这些相同的任务同时分布在多个线程上,如图2-3所示。每次访问CPU时,必须为内存、缓存、总线等通电。通过批处理活动,组件可以通电一次并在较短的时间内使用。
    这种策略需要更大的前期动态成本在给定的时间内完成更多的工作,需要更多的能量。作为交换,您可以大幅降低固定成本,这会随着时间的推移节省大量的能源。你的应用程序需要更多的能量,但它的效率更高,时间也更短。这使得CPU回到空闲状态,其他组件可以更快地断电。
    在开发应用程序时,要全面考虑其行为,并尽可能降低固定成本。


    2-3_multi-threading-power_2x.png

    相关文章

      网友评论

          本文标题:iOS应用程序能效指南

          本文链接:https://www.haomeiwen.com/subject/zcurihtx.html