权力游戏

如果我们将应用程序开发与电影制作进行比较,那么主要的因素就是漂亮的UI和出色的用户体验(UX)。 就像电影制作一样,有一些工作人员在幕后工作,努力使我们的主角看起来比最好的演员更好。 在应用程序世界中,一些主要的后台工作人员具有响应式UI,可优化网络使用并减少电池消耗。

电池是所有智能手机用户的最大痛点。 如今,用户已经学会了如何节省智能手机的电池。 iOS会就如何利用资源和尽可能高效地运行代码做出明智的决定。 但是,在开发具有精美动画的应用程序或在紧迫的时间范围内工作时,我们经常忘记关注这些因素,而且显然会给UX造成巨大损失。 或者,用户将停止授予您访问位置,后台活动等的权限。同样,您的应用中用户体验也不佳。

能耗过多的罪魁祸首是CPU,网络操作,位置和运动更新,蓝牙。 无论我们是播放视频还是只是在UI上进行任何更新,任何东西都会耗尽电池。 我们可以通过许多实践为平台的整体能源效率做出贡献。 让我们一一研究。

背景活动

  • 应用程序应在后台尽可能少地工作,无论何时,我们都应在完成任务后通知系统。
  • 系统对任务进行优先级排序,我们应该通过为NSOperation,NSOperationQueue,NSThread和调度队列提供正确的优先级来帮助完成任务。
  • 我们应该减少计时器的使用。 我们可以使用事件通知或GCD工具进行同步。 如果必须使用计时器,那么我们应该最大化时间间隔,并在完成后使其无效。
  • 文件操作也应最小化。 如果一个人需要频繁交易,则应该选择一个数据库。

用户界面

  • 每个UI更新都需要CPU,GPU,当然还需要活动屏幕。 我们应该尝试减少视图数量,使用不透明度和模糊。 我们应该使用较低且一致的帧速率进行UI更新。
  • 应避免在全屏视频上添加任何图层(例如,用于控制视频回报的元素),否则当用户不与之交互时,我们可以尝试删除这些图层。
  • 我们应该使用较深的颜色,因为较亮的颜色需要更高的能量才能显示。 我们应保持较小的介质尺寸。

联网

  • 批处理是网络运营的极乐。 我们应该尝试分批处理并减少这些操作。 我们还可以通过压缩最小化数据大小,避免冗余传输,缓存数据并使用可恢复传输。 信号强度也很重要。 不良的信号和低带宽会耗尽电池电量。
  • 我们不应过度使用推送通知。 尝试使用延迟的交付方法而不是立即交付优先级来帮助系统优化性能。 可能的替代方法是根据您的用例的本地通知。
  • VoIP应用程序可以使用PushKit框架而不是持久连接。 当出现VoIP时,PushKit会唤醒设备,而持久连接会继续发送消息以使它保持活动状态,即使呼叫未激活也是如此。

运动

  • 如果不是必须要做的事情,请避免连续运动更新。 尝试指定较高的更新时间间隔。
  • 不正确和不必要的位置使用可能会阻止设备进入休眠状态,并使位置硬件通电。 请求位置,使用它并停止位置服务。 我们可以降低标准位置更新的准确性,并在准确性不符合预期的情况下停止位置更新。 在后台运行时,我们应该推迟位置更新。 当我们需要特定位置的进入和退出通知时,请使用区域和信标监视。 此外,当GPS级别的精度对于操作而言不是很关键时,我们可以注册进行重大更改的位置更新,而不是连续更新。

外部设备

  • 在与蓝牙设备进行交互时,我们应格外小心,因为它在两个设备上都消耗能量。 我们应该在需要时扫描蓝牙设备。 我们应该最小化所有设备的处理。 尝试查找特定的(必需的)服务和特征。
  • 我们应尽量减少智能手表和手机之间的流量,因为它会影响两个设备的电池。 苹果推出了Watch Connectivity API,用于优化数据传输。 我们应该减少监视和批处理交易中的网络活动。 我们应该减少在Watch上的工作,在电话上执行昂贵的操作,并将结果用于watch。

低功耗模式

我们应该为低功耗模式注册电源状态通知,并停止所有高功耗任务。