Fe41c75fcd49f5e49d8a90ceadc2f3a3
WWDC20 10063 解密后台运行

本文基于 Session 10063 - Background execution demystified

概述

苹果给我们提供了丰富的后台执行任务的 API,我们在开发 App 时经常会用到它们来实现后台任务,但常常会发现后台任务并不是按照我们预期来执行的。那么是哪些因素影响了后台执行呢?对于不同类型的后台任务,这些影响有没有侧重点呢?对于这些困惑,本文将给出答案。

影响后台运行的因素 (Factors affecting runtime)

目标

系统在对后台应用进行调度的时候,实际上是要均衡我们的 App 的目标和整个系统的目标,在保证我们 App 能够及时更新内容、稳定运行的同时也要兼顾手机电池的续航、性能、隐私以及更重要的:要遵从用户的使用意图。

从我们 App 角度来看,目标就是:及时获取最新的内容,同时当用户切换到前台的时候 App 内容已经更新好,并且能够可靠地实现这两个目标。

从系统的角度来看,首先是电池续航。我们希望手机电池能能够满足用户一整天的使用需求,在此基础上进行后台任务的调度。

其次是性能,后台任务的运行不应该影响到前台应用的执行。

第三点是用户隐私,我们希望确保用户不会对后台运行的应用感到惊讶。也就是说,根据他们的特定使用模式,他们可以合理地预期哪些后台任务是应当有的。

最后一点是要符合用户意图,如果用户采取了某项操作(比如开启了节能模式),我们希望确保系统能够响应并根据这些独特的操作来调整后台运行以提升用户体验。

7个主要的影响因素

如下图所示,在平衡上述目标的过程中,会有很多因素会影响到后台启动和运行时间。

本文将讨论最重要的 7 个因素。它们分别是:电量过低、低电量模式、App 使用频率、后台刷新开关、系统预算和启动限制。

电量过低 Critically low battery

当电池电量低于 20% 时,手机就处于了电量过低的状态,这时让手机电池坚持到能充电续命才是最重要的,能不能及时在后台刷新,对用户而言,相对而言就不那么重要了。系统会中断一些不是很重要或者执行时间比较灵活的后台程序,好钢用在刀刃上,将仅剩的电量用在维持用户基本工作上。

低电量模式 Low Power Mode

接着讨论一下低电量模式,低电量模式与电池电量过低的情况有所不同,因为它是用户确定的设置:通过打开低电量开关来明确告知系统,降低功耗对他们而言很重要。因此,鉴于这是一个强烈而直接的信号,系统将限制某些或者调整某些不重要的后台活动。开发者可以主动检查用户是否处于低电量模式,也可以注册状态更改通知,以便在低电量模式做出相应的调整(比如可以在低电量模式下限制自动视频播放,降低网络请求和视频渲染播放带来的能耗上升)。

App 使用情况 App Usage

用户手机里面可能有几百个应用,但每天最经常用的可能就是那么少数几个。即使这几个也可能使用频率和时长差异较大。系统有一个预测引擎记录用户使用了哪些 App 以及在何时使用的,这些信息用来确定后台活动的优先级(使用的频率越高、时长越长,往往就具有更高的优先级)。

top Created with Sketch.