墓碑机制与 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设备上较为有限,一个应用程序必须在后台与前台有不同的行为.操作系统也会限制你的应用程序在后台的运行,以提高电池寿 ...
随机推荐
- Java Int类型与字符,汉字之间的转换
/** * java 中的流主要是分为字节流和字符流 * 再一个角度分析的话可以分为输入流和输出流 * 输入和输出是一个相对的概念 相对的分别是jvm虚拟机的内存大小 * 从另一个角度讲Java或者用 ...
- Springboot程序启动慢及JVM上的随机数与熵池策略
问题描述 线上环境中很容易出现一个java应用启动非常耗时的情况,在日志中可以发现是session引起的随机数问题导致的 o.a.c.util.SessionIdGeneratorBase : Cre ...
- .NET Core AWS S3云存储
前言 最近有需要用到AWS S3云存储上传附件,这里对利用.NET或.NET Core在调用SDK APi需要注意的一点小问题做个记录,或许能对后续有用到的童鞋提供一点帮助 AWS S3云存储 官方已 ...
- Weblogic命令执行漏洞(CVE-2018-2628)复现
一.漏洞环境搭建 CVE-2018-2628影响的软件版本为: Weblogic 10.3.6.0 Weblogic 12.1.3.0 Weblogic 12.2.1.2 Weblogic 12.2. ...
- codeblocks opengl glew freeglut 2020.11.15
https://wenku.baidu.com/view/28cd5ebfaf1ffc4fff47accf.html 一下为测试代码 /* ============================== ...
- sql优化的几种方式
一.为什么要对SQL进行优化 我们开发项目上线初期,由于业务数据量相对较少,一些SQL的执行效率对程序运行效率的影响不太明显,而开发和运维人员也无法判断SQL对程序的运行效率有多大,故很少针对SQL进 ...
- 在开发板上显示英文字符和汉字--tiny6410
程序字符需要改成gb2312.否则无法正常显示中文字符. main.c代码: #include <sys/types.h> #include <sys/stat.h> #inc ...
- C语言输入字符串
首先强调一点,C语言没有字符串的概念!所谓的字符串实际上还是以数组形式保存的. 方法1 -- 通过"%s"输入 优点:简单明了,输入字符只要不大于数组长度都可以. #includ ...
- [学习笔记]尝试go-micro开发微服务<第一波>
平时项目都是基于c++,lua,node, 现在打算开始自学开发微服务; 也顺带磨砺下go和docker 前期准备 1. 有golang编程基础 本系列文章是基于有golang编程基础,有过实际开 ...
- 腾讯消息队列CMQ部署与验证
环境 IP 备注 192.168.1.66 node1 前置机 192.168.1.110 node2 192.168.1.202 node3 架构图 组件介绍 组件 监听端口 access 1200 ...