墓碑机制与 iOS 应用程序的生命周期

时间:2023-03-08 16:03:06

① 应用程序的状态

iOS 应用程序一共有 5 种状态:

  • Not running:应用未运行

  • Inactive:应用运行在 foreground 但没有接收事件

  • Active:应用运行在 foreground 且正在接收事件

  • Background:运行在 background 且正在执行代码

  • Suspended:运行在 background 但没有执行代码

② 墓碑机制

墓碑机制(Tombstone)也就是常说的「伪多任务」,是手机操作系统中的一个程序运行规则。

当上一个任务*中断时,如按下 Home 键至主界面的瞬间,系统会记录当下应用程序的状态,随后程序被冻结起来(完全挂起),就像把事件记录在墓碑上一样。

当需要恢复时,根据墓碑上的内容,将程序恢复到中断之前的状态。

这样的一种机制就是墓碑机制,墓碑机制常见于移动设备这种内存或电能资源有限的平台。

在此机制之上,苹果也开放了一个后台接口,允许应用在进入后台之后继续运行10分钟,无论亮屏还是息屏休眠都是10分钟,时间一到立马挂起。

墓碑式后台,在关闭程序时保存现场,下次启动时还原,给人一种后台的假象。

③ 触发墓碑化

程序只要符合以下情况之一,就会触发墓碑化,使得程序挂起:

(1)iOS4.0以前的系统,APP 是基于 iOS4.0 之前系统开发的,设备不支持多任务。

(2)在Info.plist 文件中,程序包含了 UIApplicationExitsOnSuspend 键。

(3)系统资源不足时系统调度终止 APP。

④ 真后台

没错,iOS 把它称之为真后台。但与 Android 的后台机制是不一样的,为了兼顾系统体验和统一进程管理,iOS 只是给了几个后台接口:

1、Background Audio 后台音频

在播放音频时,即使应用退到后台,只要一直有音频在播放,那应用就可以一直在后台运行。

2、Location Services 定位服务

这是后台的定位服务,由系统进行统一管理。

3、VoIP 语音通话

一些类似 Skype 通话应用需要调用这个接口,实现后台的语音通话。

4、Newsstand 新闻推送

报刊杂志后台可以主动下载更新,保证其时效性。此后台运行的选项就是提供给报刊杂志类应用可以在后台下载及处理报刊杂志内容,而下载的过程需要使用 NewsstandKit 中的 NKAssetDownload 进行下载。需要注意的是,下载的过程中,应用可能还是会被挂起,甚至应用被退出,而 iOS 会在 Wi-Fi 环境下继续下载,直到下载完成。

5、Background Task Completion 后台任务冻结

这也就是 iOS4 上面允许后台保留 10 分钟的那个接口,iOS7 改为允许在开屏下运行 10 分钟,关屏会暂停,直到开屏后重启继续凑足 10 分钟,直到满10分钟后,这个后台就会被冻结。

6、 Remote Notification 远程推送

iOS7 新增,由统一推送通知激活后台,以往 QQ 微信之类的聊天软件接收到推送的时候都是点进去再加载数据,而这个接口允许软件接收到推送后可以直接启动后台任务。另外还支持Silent Notification(静默推送),适合实时类强的应用,但有频率限制(每小时几次)。

7、Background Transfer Service 后台数据服务

iOS7 新增,可由应用直接激活的无时间限制后台,但是功能很明确,只限于数据的上传下载这类传输服务,且只会在 WiFi 环境下才进行传输。

注意:应用被 Background Fetch、Remote Notification、Background Transfer Service 三类唤醒时,只被给予几秒钟时间来处理更新。

⑤ 系统统一推送(无后台推送)

说到墓碑机制就不得不说 iOS 的系统推送机制,在应用程序进入墓碑状态后,其数据仍可通过苹果搭建的推送服务器传输,并不需要应用后台运行,这是无需后台驻留的系统级推送。