iOS后台运行机制

IOS提供的伪后台支持后台音乐播放,GPS定位,网络语音通话,以及任务完成。也就是说仅只有这四项工作可以真正在后台运行。所谓任务完成是指在程序退出的时候还有工作没处理完,比如保存进度存档,那么系统允许程序在后台继续工作,然后在完成保存进度之后停止运行。

除了上述四项后台功能,系统还提供一个程序快速切换的功能,这个功能也算是IOS多任务的一部分。个人观点,这个功能是IOS多任务中最先进最有用的功能。它让程序在最小化的时候仅仅是暂停运行,但并不释放内存,保持程序当前的状态,这样当你再次打开这个程序的时候,程序不需要重新从硬盘(闪存)中读出,不需要重新Load数据,而是瞬间恢复到上次退出程序时的状态,这个特性会给用户很强的多任务的感觉,仿佛程序从来没有退出过一样。而这个功能所花费的代价只是一块内存,而并不消耗cpu时间。什么意思呢?就是说快速切换并不比退出程序多耗一丝电,相反,由于再次打开程序的时候不需要读硬盘(闪存),它比退出程序再重新启动更省电!

第一点是:为快速切换所保留的内存空间是可以被挤占的。IOS是没有内存交换空间的,它不会像Windows那样把硬盘(闪存)虚拟成内存来建立一个对应用程序来说无限的虚拟内存空间。所以,在IOS中,当前台程序内存空间不足的时候,系统会释放掉为后台程序保留的用于快速切换的内存,提供给前台程序使用。当然,如果所有能释放的内存都释放了,还不能满足前台程序的内存要求的话,系统会直接中止前台程序的运行,这就是我们为什么会看到有些程序运行中无故退出的原因。用于快速切换的内存可以被挤占这个特性是很先进的内存动态管理方式,特别适合于内存资源紧张的移动设备。这种内存管理策略的优点是在几乎不消耗任何额外的时间(CPU时间,程序在后台暂停)、空间(内存空间,可以被挤占)资源的情况下,可以提供一个性能优良的伪多任务环境。但是正因为快速切换的内存可以被挤占,所以它的缺点就是它不总是可用的。大家都有经验打开Safari的时候,有时能够直接显示上次退出时候的网页,有时候就需要重新载入,就是这个原因。

关于快速切换我们需要知道的另外一点是,在每个程序最小化的时候,系统都会给程序发送一个通知,告诉程序你现在已经被最小化了。这时候一个优雅、精良的程序会释放掉可以释放的一部分无关紧要的空间以节省内存,比如画面缓存。这个特性的意思是支持IOS多任务的程序被快速切换到后台以后占用的内存空间会比在前台运行时少。

越狱后的IOS安装Backgrounder可以实现真后台,Backgrounder是一个对IOS行为影响巨大的程序,越狱之后费电厉害的一大半原因是因为这个程序。Backgrounder的真后台的操作方式就是在程序最小化的时候不给程序发送这个最小化的通知,所以程序不知道自己已经在后台了,不仅是仍然占用和在前台时一样多的内存,而且还在继续运行,和在前台时一样烧电。而除了几个操作系统底层的精灵进程之外,所有程序在IOS的原生后台状态下都是暂停运行的,不烧电的。不仅如此,就算是已经在后台的程序,如果它支持IOS多任务,那么它在收到系统发出的内存不足通知的时候,它还可以继续释放更多内存。比如Safari,在刚最小化的时候,它是保留所有打开的网页的,之后如果系统发出内存不足通知,Safari就可以一个一个地释放已打开的网页所占用的内存。


iOS应用在后台运行也是iOS应用生命周期的一个部分,一般提到iOS的后台管理机制,更像是在描述一个iOS应用进入后台后的状态。


先上一张官方文档的图:


这个官方文档的图的Background和Suspended状态描述了一个iOS应用在后台时的行为,可以看出一个应用进入后台后appDelegate回调appDidEnterBackground:方法后会给应用一个机会是否在后台运行,这个“真正”运行的时间经过实验似乎视内存压力在3~10秒不等。


我在 iOS 究竟在何时关闭后台程序? - Cerulean 的回答 这个问题里的代码用于应用进入后台后多向iOS申请约10分钟的时间可以做其他的事情。这个时候程序在后台是可以执行代码的,也有一些方法可以让应用一直保持在这个状态,比如放一段很长时间的空歌曲等等。


如果没有UIBackgroundTaskIdentifier注册,3~5秒应用就会被iOS自动挂起了。被挂起的应用不能执行代码,好像一种被冻结的状态,这个状态也没有appDelegate的回调方法,但是应用本身仍然驻留在内存中。这个时候iOS对挂起一个应用的管理,就是完全看人品和内存压力了。


事实上在现在苹果设备1G内存情况下,被挂起的应用进程被杀掉的情况还是相当常见的,比如,同时开着新浪微博,微信,QQ,经常会出现有些应用需要SSO授权登陆切换到微博微信QQ,然后切回来发现这个应用居然重新打开了。这个就是内存压力大的时候被挂起的应用被自然而然的杀掉了。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值