用途
本资料是 iOS 后台执行 API 的完整参考,围绕如何让应用在进入后台后继续完成工作展开,配有来自 WWDC 会话的代码示例。资料自身定位为参考手册,另提到两个相关技能:axiom-background-processing(决策树与模式)和 axiom-background-processing-diag(故障排查)。
主要能力
资料按 Part 1 至 Part 10 组织,覆盖以下能力:
- Part 1:BGTaskScheduler 注册。 包括 Info.plist 中 BGTaskSchedulerPermittedIdentifiers 与 UIBackgroundModes 的配置、register(forTaskWithIdentifier:using:launchHandler:) 的参数说明,以及注册时机要求——必须在 application(_:didFinishLaunchingWithOptions:) 返回 true 之前完成。
- Part 2:BGAppRefreshTask。 用于保持应用内容全天新鲜,运行时长约 30 秒,通过 BGAppRefreshTaskRequest 的 earliestBeginDate 设置最小延迟,处理器中需先设置 expirationHandler、再调度下一次刷新、最后调用 setTaskCompleted。
- Part 3:BGProcessingTask。 用于可延迟的维护性工作(数据库清理、ML 训练、备份等),运行时长可达数分钟,支持 requiresExternalPower 和 requiresNetworkConnectivity 两个约束属性;当 requiresExternalPower 为 true 时会关闭 CPU Monitor。
- Part 4:BGContinuedProcessingTask(iOS 26+)。 用于在应用进入后台后继续用户主动发起的工作,系统 UI 会展示进度;需使用通配符标识符并动态注册,title 与 subtitle 显示在系统 UI 中,strategy 支持 .fail 与 .enqueue;处理器中必须上报进度,否则任务会被自动过期;还涉及 GPU 资源可用性检查。
- Part 5:beginBackgroundTask。 用于应用进入后台时完成关键收尾工作(状态保存、上传完成),约 30 秒上限,工作完成后应立即调用 endBackgroundTask。
- Part 6:后台 URLSession。 用于应用被终止后仍继续的大文件下载与上传,涵盖配置项(sessionSendsLaunchEvents、isDiscretionary 等)、下载任务启动、AppDelegate 事件处理回调以及 URLSessionDelegate 实现要点。
- Part 7:后台任务测试。 提供 LLDB 模拟任务启动与过期的调试命令、测试流程、Console.app 过滤方法与 getPendingTaskRequests 查询方式。
- Part 8:节流与系统约束。 列出 7 个调度影响因素,以及低电量模式、后台应用刷新状态、热状态(thermalState)的检查与监听代码。
- Part 9:后台推送通知。 静默推送 payload、APNS 优先级取值与远程通知处理器写法,并说明静默推送存在速率限制。
- Part 10:SwiftUI 集成。 涉及 backgroundTask 修饰符的内容。
使用方式
资料以代码示例为核心,各 Part 先说明任务用途与运行时长,再给出 Info.plist 配置、调度请求构造、处理器实现和属性表格。开发时可按任务类型查阅对应章节,将示例中的标识符替换为自身应用的标识符后使用。测试部分提供了在调试器中暂停后执行的 LLDB 命令,用于触发任务启动与过期。
适用场景
适合需要为 iOS 应用接入后台内容刷新、可延迟维护任务、用户发起型持续后台处理、后台大文件传输,或需要排查后台任务被系统节流的开发者查阅。
限制
资料中的运行时长、调度行为与各类约束均取决于系统决策,earliestBeginDate 仅为最小延迟而非精确执行时间;后台任务在模拟器、低电量模式、用户关闭后台应用刷新、设备未充电等情况下可能不执行;静默推送受速率限制,不能保证每次推送都触发启动。此外,BGContinuedProcessingTask 与 GPU 资源检查标注为 iOS 26+,使用前需确认系统版本与配置要求。