墓碑机制与 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 的系统推送机制,在应用程序进入墓碑状态后,其数据仍可通过苹果搭建的推送服务器传输,并不需要应用后台运行,这是无需后台驻留的系统级推送。
墓碑机制与 iOS 应用程序的生命周期的更多相关文章
- iOS 应用程序的生命周期
iOS 应用程序的生命周期(网络资源总结) http://blog.csdn.net/totogo2010/article/details/8048652 http://www.cocoachina. ...
- [转载] iOS应用程序的生命周期
iOS应用程序的生命周期 2015-06-23 iOS大全 (点击上方蓝字,快速关注我们) iOS应用程序一般都是由自己编写的代码和系统框架(system frameworks)组成,系统框架提供一些 ...
- [ios基础]IOS应用程序的生命周期问题
—程序的生命周期 a.程序的生命周期是指应用程序启动到应用程序结束整个阶段的全过程 b.每一个IOS应用程序都包含一个UIApplication对象,IOS系统通过该U ...
- 浅析 - iOS应用程序的生命周期
1.应用程序的状态 状态如下: Not running 未运行 程序没启动 Inactive 未激活 程序在前台运行,不过没有接收到事件.在没有事件处理情况下程序通 ...
- [转]iOS 应用程序的生命周期
OS的应用程序的生命周期,还有程序是运行在前台还是后台,应用程序各个状态的变换,这些对于开发者来说都是很重要的. iOS系统的资源是有限的,应用程序在前台和在后台的状态是不一样的.在后台时,程序会受到 ...
- iOS开发-程序的生命周期
为了更好的管理程序,了解程序的生命周期是很有必要的. 运行结果: 1.首次启动: 2015-05-26 17:33:28.362 Live[4858:214241] 程序开始 2015-05-26 1 ...
- iOS应用程序的生命周期
iOS应用程序一般都是由自己编写的代码和系统框架(system frameworks)组成,系统框架提供一些基本infrastructure给所有app来运行,而你提供自己编写的代码来定制app的外观 ...
- IOS学习1——IOS应用程序的生命周期及基本架构
一.应用程序的状态和多任务 有时系统会从app一种状态切换另一种状态来响应系统发生的事件.例如,当用户按下home键.电话打入.或其他中断发生时,当前运行的应用程序会切换状态来响应.应用程序的状态有以 ...
- iOS 应用程序的生命周期(转CocoaChina)
对于iOS应用程序,关键是要知道你的应用程序是否正在前台或后台运行.由于系统资源在iOS设备上较为有限,一个应用程序必须在后台与前台有不同的行为.操作系统也会限制你的应用程序在后台的运行,以提高电池寿 ...
随机推荐
- Deep Neural Networks for YouTube Recommendations YouTube的经典推荐框架
https://zhuanlan.zhihu.com/p/52169807 王喆大佬的讲解
- Qt学习笔记-启动一个额外的应用程序-获取输入的回车信号
现在让我们的程序模拟windows下的运用程序. 在命令行中输入命令.点击确定即可运行系统中的程序. 添加头文件#include <QProcess> 在确定按钮的响应函数中写上功能要求. ...
- JS 获取(期号、当前日期、本周第一天、最后一天及当前月第一、最后天函数)
JS 获取(期号.当前日期.本周第一天.最后一天及当前月第一.最后天函数 /** 2 * 获取当前月期号 3 * 返回格式: YYYY-mm 4 * / 5 function getCurrentMo ...
- HTML颜色
- QPushButton
QPushButton 什么是QPushButton? 构造函数 常用属性和方法 QPushButton 什么是QPushButton? QPushButton是一个按键类. class Q_GUI_ ...
- LAMP搭建示例
lamp介绍 其实就是由Linux+Apache+Mysql/MariaDB+Php/Perl/Python的一组动态网站或者服务器的开源软件,除Linux外其它各部件本身都是各自独立的程序,但是因为 ...
- 定期删除文件夹中的文件——C#
下面是自定义的一个函数,参数分别为:文件夹名称.文件后缀.保存天数 逻辑是获取当前系统的时间,和文件创建时间去作差,如果结果大于保存天数,就删除它 /// <summary> /// 定期 ...
- 源码编译搭建LNMP环境
LNMP源码编译 1.LNMP介绍 LNMP=Linux Nginx Mysql PHP Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器.Ng ...
- oracle 客户端与服务器端字符集原理(转自totozlj)
1.环境假设: 名词解释:应用程序页面即用户在浏览器中看到的页面,一般程序员在写页面的时候都会在页面中设置编码,这个编码也即是数据在浏览器到web服务器间传输的编码,如果不设置则默认iso-8859的 ...
- wdcp 安装
lanmp一键安装包是wdlinux官网2010年开始推出的lamp,lnmp,lnamp(apache,nginx,php,mysql,zend,eAccelerator,pureftpd)应用环境 ...