墓碑机制

墓碑机制与 iOS 应用程序的生命周期 - 陈旭华 - 博客园 https://www.cnblogs.com/chenxuhua/p/12851259.html

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

 

① 应用程序的状态

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 的系统推送机制,在应用程序进入墓碑状态后,其数据仍可通过苹果搭建的推送服务器传输,并不需要应用后台运行,这是无需后台驻留的系统级推送。

https://baike.baidu.com/item/墓碑机制

墓碑机制是微软Windows Phone 7手机操作系统中的一个程序运行规则。
 
 
中文名
墓碑机制
外文名
Tombstone
发布时间
2014年
硬    件
微软Windows Phone 7手机
缺    陷
WP7却不支持多任务运行
表    现
游戏的运行状态等数据会冻结保存

墓碑机制简单定义

编辑
 
说简单点,就是手机上一个任务被迫中断时(如有电话打入),系统记录下当前应用程序的状态后,(像把事件记录在墓碑上一样),然后中止程序。当需要恢复时,根据“墓碑”上的内容,将程序恢复到中断之前的状态。这样的一种机制就是“墓碑机制”

墓碑机制具体表现

编辑
 
微软在2010年发布了全新的Windows Phone 7手机操作系统,但令人不解的是,WP7却不支持多任务运行。据了解,WP7并不是严格的单任务,比如WP7中微软自家的IE和ZUNE就能同时运行。
首先来说一些WP7系统程序运行的基本规则,微软不允许任何第三方应用程序在WP7的后台运行,特定时间内只有一个应用程序的在前台运行如果你的应用程序没有在前台显示,就表示这些程序并没有运行,这样就不耗费运行内存和处理器资源。这样做主要是为了延长电池续航时间,并保证响应一致的用户体验。
但是所有的WP7手机都将配备返回按钮硬件,这个按钮除了有返回导航功能之外,还将支持应用程序之间的切换,比如当你在某个应用程序时点击了里面的网页链接,然后调用内置浏览器进行查看,在查看完毕之后就可以按返回键重新返回刚才的程序。
问题就出来了,当前的应用程序切换回之前的应用时,究竟是恢复了一个应用还是重新打开了这个应用呢?因为刚才已经说过了,WP7不允许后台运行程序,而两者的区别就是,重新打开时不会保持刚才的使用状态,恢复是可以延续使用状态的,这就要说到微软的墓碑(Tombstone)机制了。
墓碑是微软为WP7切换应用程序状态的一种处理机制,以使用过程为例,当用户正在使用一个应用程序,比如游戏或者新闻阅读,这时有电话打进来,来电提示和通话页面将会在前台显示,正在运行的游戏就会消失,但是WP7不允许后台运行应用,这时候墓碑机制就会触发,游戏的运行状态包括画面、进度等等数据会冻结保存,相当于暂停,但是游戏确实没有运行,这也是墓碑名字的含义:应用程序已经死了,但是墓碑上记录有临终前的所有状态。当通话结束后,游戏操作系统会将应用程序进程重新启动,并将状态数据传递为应用进行恢复,这也相当于应用从墓地里面爬出来,并按照墓碑上记录的状态进行还原。
在程序代码示例中,微软给出了单个应用程序的运行状态代码,共有四个App.xaml.cs文件,这些直接关系到执行模式的代码分别是Application_ Launching、Application_ Activated、Application_ Deactivated、Application_ Closing,分别是启动、复活(激活程序恢复状态)、停用(记录墓碑数据)、关闭(彻底关闭)。开发者们需要注意的是,在开发过程中需要使用微软给出的工具和相关代码才能让自己的应用支持墓碑机制,否则当用户正在使用的时候突然一个电话过来之后就得再次手动打开程序重头再来,这会让用户非常不爽。
在早期的WP7系统中,微软并没有在程序不运行的时候将进程彻底杀死,而是将其暂停,但是这种情况导致了后台运行堆栈的混乱,API和事件触发经常会出现问题,所以微软才决定使用墓碑机制。
不过完全实行墓碑机制将会影响到电话的某些功能,比如短信、即时通信、天气等需要时刻保持运行和更新的应用,微软同样给出了推送通知服务(Push Notification Services)的API,允许应用程序调用该接口保持实时更新。

墓碑机制简单定义

编辑
说简单点,就是手机上一个任务被迫中断时(如有电话打入),系统记录下当前应用程序的状态后,(像把事件记录在墓碑上一样),然后中止程序。当需要恢复时,根据“墓碑”上的内容,将程序恢复到中断之前的状态。这样的一种机制就是“墓碑机制”

墓碑机制具体表现

编辑
微软在2010年发布了全新的Windows Phone 7手机操作系统,但令人不解的是,WP7却不支持多任务运行。据了解,WP7并不是严格的单任务,比如WP7中微软自家的IE和ZUNE就能同时运行。
首先来说一些WP7系统程序运行的基本规则,微软不允许任何第三方应用程序在WP7的后台运行,特定时间内只有一个应用程序的在前台运行如果你的应用程序没有在前台显示,就表示这些程序并没有运行,这样就不耗费运行内存和处理器资源。这样做主要是为了延长电池续航时间,并保证响应一致的用户体验。
但是所有的WP7手机都将配备返回按钮硬件,这个按钮除了有返回导航功能之外,还将支持应用程序之间的切换,比如当你在某个应用程序时点击了里面的网页链接,然后调用内置浏览器进行查看,在查看完毕之后就可以按返回键重新返回刚才的程序。
问题就出来了,当前的应用程序切换回之前的应用时,究竟是恢复了一个应用还是重新打开了这个应用呢?因为刚才已经说过了,WP7不允许后台运行程序,而两者的区别就是,重新打开时不会保持刚才的使用状态,恢复是可以延续使用状态的,这就要说到微软的墓碑(Tombstone)机制了。
墓碑是微软为WP7切换应用程序状态的一种处理机制,以使用过程为例,当用户正在使用一个应用程序,比如游戏或者新闻阅读,这时有电话打进来,来电提示和通话页面将会在前台显示,正在运行的游戏就会消失,但是WP7不允许后台运行应用,这时候墓碑机制就会触发,游戏的运行状态包括画面、进度等等数据会冻结保存,相当于暂停,但是游戏确实没有运行,这也是墓碑名字的含义:应用程序已经死了,但是墓碑上记录有临终前的所有状态。当通话结束后,游戏操作系统会将应用程序进程重新启动,并将状态数据传递为应用进行恢复,这也相当于应用从墓地里面爬出来,并按照墓碑上记录的状态进行还原。
在程序代码示例中,微软给出了单个应用程序的运行状态代码,共有四个App.xaml.cs文件,这些直接关系到执行模式的代码分别是Application_ Launching、Application_ Activated、Application_ Deactivated、Application_ Closing,分别是启动、复活(激活程序恢复状态)、停用(记录墓碑数据)、关闭(彻底关闭)。开发者们需要注意的是,在开发过程中需要使用微软给出的工具和相关代码才能让自己的应用支持墓碑机制,否则当用户正在使用的时候突然一个电话过来之后就得再次手动打开程序重头再来,这会让用户非常不爽。
在早期的WP7系统中,微软并没有在程序不运行的时候将进程彻底杀死,而是将其暂停,但是这种情况导致了后台运行堆栈的混乱,API和事件触发经常会出现问题,所以微软才决定使用墓碑机制。
不过完全实行墓碑机制将会影响到电话的某些功能,比如短信、即时通信、天气等需要时刻保持运行和更新的应用,微软同样给出了推送通知服务(Push Notification Services)的API,允许应用程序调用该接口保持实时更新。
原文地址:https://www.cnblogs.com/rsapaper/p/13677664.html