iOS 中的后台处理简介
iOS 对后台处理的监管非常严格,并提供了三种实施方法:
- 注册后台任务 - 如果应用程序需要完成重要任务,它可以要求 iOS 在应用程序进入后台时不要中断该任务。 例如,应用程序可能需要完成用户登录,或完成大文件的下载。
- 注册为后台必需的应用程序 - 应用程序可以注册为具有已知特定后台要求的特定类型的应用程序,例如音频、VoIP、外部附件、Newsstand 和位置。 只要这些应用程序执行已注册应用程序类型参数范围内的任务,就允许它们拥有连续的后台处理权限。
- 启用后台更新 - 应用程序可以通过区域监视或侦听重大位置更改来触发后台更新。 从 iOS 7 开始,应用程序还可以使用后台提取或远程通知进行注册,以在后台更新内容。
应用程序状态和应用程序委托方法
在深入了解 iOS 中的代码后台处理之前,我们需要了解后台如何影响 iOS 应用程序的生命周期。
iOS 应用程序生命周期是应用程序状态和用于转换状态的方法的集合。 应用程序根据用户的行为和应用程序的后台要求在状态之间转换。 下图演示了状态转换:
- 未运行 - 应用程序尚未在设备上启动。
- 正在运行/活动 - 应用程序出现在屏幕上,并且正在前台执行代码。
- 非活动 - 应用程序因来电、短信或其他干扰而中断。
- 已在后台处理 - 应用程序进入后台并继续执行后台代码。
- 已暂停 - 如果应用程序没有任何可在后台运行的代码,或者所有代码均已完成,则操作系统将暂停该应用程序。 已暂停的应用程序的进程保持活动状态,但应用程序在此状态下无法执行任何代码。
- 恢复为未运行/终止状态(罕见)- 有时,应用程序的进程会被销毁,并且应用程序会恢复为“未运行”状态。 这种情况发生在内存不足的时候,或者用户手动终止应用程序的时候。
自从引入多任务支持以来,iOS 很少终止空闲应用程序,而是将其进程以“已暂停”状态保留在内存中。 将应用程序进程保持活动状态可确保应用程序在用户下次打开它时快速启动。 这也意味着应用程序可以自由地从“已暂停”状态恢复到“已在后台处理”状态,而无需占用系统资源。 iOS 7 通过新的 API 利用此功能,使应用程序能够在设备进入睡眠状态时暂停后台任务、直接从后台更新内容而无需用户交互等等。 我们将在 iOS 后台技术中介绍新的 API。
应用程序生命周期方法
当应用更改状态时,iOS 会通过 AppDelegate
类中的事件方法通知应用程序:
OnActivated
- 首次启动应用时以及每次应用返回到前台时调用此方法。 这是每次打开应用时需要运行的代码的放置位置。OnResignActivation
- 如果用户收到短信或电话等干扰,则会调用此方法,并暂时停用应用。 如果用户接听电话,则会将应用发送到后台。DidEnterBackground
- 当应用进入后台处理状态时调用,此方法为应用程序提供大约五秒钟的时间来应对可能的终止。 可以利用这段时间来保存用户数据和任务,并从屏幕上删除敏感信息。WillEnterForeground
- 当用户返回到后台处理或暂停的应用程序以及将其启动到前台时,将调用WillEnterForeground
。 此时可以通过重新调整DidEnterBackground
期间保存的任何状态来准备好应用进入前台。 此方法完成后,将立即调用OnActivated
。WillTerminate
- 应用程序被关闭,其进程已被销毁。 仅当设备或操作系统版本上不支持多任务处理、内存不足或用户手动终止后台应用程序时,才会调用此方法。 请注意,终止的已暂停应用程序不会调用WillTerminate
。
下图演示了应用程序状态和生命周期方法如何组合在一起:
iOS 中后台的用户控件
iOS 7 引入了多项功能,使用户可以更好地控制应用程序的后台处理状态。 “应用切换器”和“后台应用刷新”设置都会影响应用程序生命周期。
应用切换器
应用切换器是 iOS 7 中引入的一项重要控制功能。 双击“主页”按钮即可启动它,并显示进程处于活动状态的应用程序:
使用应用切换器,用户可以滚动浏览所有后台处理和暂停的应用程序的快照。 点击应用程序会将其启动到前台。 向上滑动会将应用程序从后台删除,并终止其进程。 我们将在下一部分的 iOS 应用程序生命周期演示中详细了解应用切换器。
重要
应用切换器不会显示后台处理应用程序和已暂停应用程序之间的差异。
后台应用刷新设置
iOS 7 允许用户针对注册了后台处理的应用程序禁用后台处理,从而增强了用户对应用程序生命周期的控制。 这不会阻止应用程序运行后台任务。
用户可以通过导航到“设置”>“常规”>“后台应用刷新”并编辑所选应用程序的后台权限,来更改此设置。 如果后台应用刷新设置为“关闭”,应用程序将在进入后台后立即暂停,并无法进行任何后台处理:
开发人员可以使用 BackgroundRefreshStatus
API 检查“后台刷新应用程序”状态。 有关示例,请参阅检查后台刷新设置秘诀。
我们已介绍了 iOS 应用程序生命周期的基础知识,以及用于控制应用程序生命周期的功能。 接下来,让我们了解 iOS 应用程序生命周期的运作方式。