iOS 13 全新后台任务 API

2020-03-29  本文已影响0人  红色海_

Framework - Background Tasks

available: iOS 13.0+ Beta

iOS 13 推出了全新的 Background Tasks API,并将曾经的后台刷新 API 并入其中,易名为 BGAppRefreshTaskRequest,使用方式几乎不变。

让人新奇不是这个 Refresh Task,而是 Processing Task:

BGProcessingTaskRequest
A request to launch your app in the background to execute a processing task that can take minutes to complete.

使用新的 BGProcessingTask,你可以在 App 处于前台时,将一个后台任务提交给 iOS。随后当你的 App 处于后台时,iOS 就有可能会唤起你,让你执行这个任务。

你会有长达数分钟的时间去完成这个任务。相比之下,BGAppRefreshTask,或者说从前的后台刷新 API,则仅有可怜的上限 30 秒的时间。

至于将任务提交给 iOS 后,iOS 会在什么时候执行,基本都取决于用户的状态。

完全由用户掌控的,是其使用你的 App 的频率,根据 WWDC Session 的说法推测,如果用户超过 1 周没有打开过你的 App,很有可能你的任务会被无限期延迟;如果 App 超过一个月未启动,基本上没可能会轮到你。

开发者一定程度上可以控制的有三:

最早开始时间,比如我要我的任务至少 3 天后再执行
是否需要网络,若指定为「需要」,则任务仅在网络连接可用时执行
是否需要外接电源,若指定为「需要」,则任务仅在设备充电时执行
这里最刺激的是最后一点。

如果你将后台任务指定为「需要外接电源」,在任务执行时,iOS 会关闭 CPU 监视器,允许任务使用设备全部的性能。

对用户来说,升级到 iOS 13 之后,有的 App 可能会在你手机半夜充电的时候跑一些繁重的任务,比如机器学习(训练人工智能)。

总而言之,新 API 让设备的硬件资源调配在时间维度上更为合理:iOS 更倾向于在设备空闲的时候执行 BGProcessingTask,比如晚上人睡了、手机充着电的时候。

而 BGAppRefreshTask 由于仅有不到 30 秒的执行时间,往往用来做强度更轻、与 UI(用户交互)更相关的任务,对此,iOS 会根据用户开启 App 的时间段(比如每天早上打开新闻 App),在有需要的时候执行(赶在你每天看新闻的点之前刷新数据)。

上一篇下一篇

猜你喜欢

热点阅读