对 iOS 多任务的误解 [多任务原理]

来源:互联网 发布:昆山华道数据干什么的? 编辑:程序博客网 时间:2024/05/07 15:34

如今,多任务这个有趣特性已经成功集成在设备中,我们如今使用的智能手机完全支持多任务,这其中有一个东西尤其功不可没。这就是苹果的iPhone手机。

iOS是使用广泛的令人惊叹的操作系统。在2010年之后iOS 4 变成了多任务操作系统。众所周知,当你打开一个应用程序然后退出,它仍然会保留在后台。

当然,这会导致电池的消耗,你必须手动关闭它们。其实这根本不关电池消耗的事。一些开发者在他们的博客中也提到这一点。

Fraser Speirs是Connected Flow 公司的程序员,同时是雪松英才学校(苏格兰的一所少年学校,使用iPad进行教学)IT和计算机部门的负责人。在他的文章中,他解释了关于iOS多任务的美丽的误会。

首先是关于电池消耗:这确实需要注意,但这个问题要区别对待,说出这个问题的人并不清楚真正的原因。

他进一步解释:事实上,iOS多任务栏并不是包含“所有正在运行的应用程序列表”,它仅仅是“最近使用过的应用程序列表”。用户根本没有必要自己管理iOS的后台任务。

除了一些特殊情况(我会解释),显示在多任务栏中的app当前并不处于运行状态。当你按下Home按钮,iOS将通知app退出。大部分情况下,它将退出,不再占用CPU时间(包括电池),释放内存(需要的时候恢复)。

他解释:iOS 应用程序有5个状态:

停止运行-应用程序已经终止,或者还未启动。

不活动-应用程序处于前台但不再接收事件(例如,用户在app处于活动时锁住了设备)。

活动-app处于“使用中”的状态。

后台-app不再屏幕上显示,但它仍然执行代码。

挂起-app仍然驻留内存但不再执行代码。

在此,我们不讨论app的活动/不活动状态。绝大部分困惑是在app从活动状态转入后台,然后到挂起,最后到停止运行这个过程中产生的。

按下Home键时,app从活动状态转入后台,绝大部分app通常在几秒内就从后台变成了挂起。

第一个技术细节是,挂起的app仍然驻留在设备内存内。这就是为什么当你返回app时,能快速恢复它们的原因。它们并没有占用cpu时间,也不消耗电池电量。

你会想到,如果app驻留在内存,你必须想办法删除它们以便节约内存。如果你不删除它们iOS也会删除它们。如果app处于挂起状态,当你打开一个内存敏感的app,比如一个大游戏时,iOS会自动清理挂起的app,将他们变为停止运行状态。这样,它们就完全被清理出内存,当你再次点击app图标它们会重新启动。

人们容易混淆的是:所有这些都对多任务栏没有影响。多任务缆总是显示最近使用的app列表,而跟它们是否处于后台、挂起或停止运行状态无关。你应该注意到,当前处于活动状态的app并不显示在多任务栏中。

后台任务

当app被移到后台,通常几秒内就会被移到挂起状态。app能够延长这个时间,通过声明一个“后台任务”。

例如,有的app需要下载比较大的文件。比如我最爱的微博Instacast。当Instacast处于活动状态,它会开始下载新的博客。如果我点击Home键,Instacast会花5秒钟继续运行于后台状态,然后挂起。这将中断博客的下载,可能是5分钟或者更多。

iOS允许Instacast声明一个后台下载任务。这会让Instacast在我按下Home键之后仍然有额外的时间在后台运行,知道博客下载完成。app能申请的后台运行时间并不是无限的,app只能申请大约10分钟的后台运行时间,然后被iOS强行挂起。但是你无须为此担心。

无限的后台运行时间

所有的app都有5秒的后台运行时间。一些app可以请求10分钟的额外时间。有一小部分app确实需要无限的后台运行时间,iOS是允许的。

准确地说,在iOS5中,有5类app允许有无限的后台运行时间:

1.  可以在后台播放声频的app。例如Instacast在播放一个博客时。

2.  可以在后台跟踪你的位置的app。例如,TomTom导航系统,哪怕在另外一个app处于活动时,它也能发出语音提示。

3.  监听VOIP呼入的app。使用Skype时,当Skype在后台运行时,你仍然可以收到Skype来电。

4.  可以下载新内容的报刊类app。

5.  后台连续接收来自外部硬件(ExernalAccessory框架)的更新。

上面5种app在任务执行完毕时自动变成挂起状态。当Instacast停止博客播放时,它将挂起。还有一些iOS自带的app也能在后台连续运行,我们用的最多的可能是Mail程序。

无论这些app在后台运行多长时间,它们都会占用内存、CPU时间和电量。一般,你会知道你正在使用类似的app。开发者必须声明它们所需要的后台运行类别,AppStore会检查这些声明是否被滥用。

 

前面我说过“用户根本没有必要自己管理iOS的后台任务”。当然,如果后台运行的app崩溃并无法正常关闭时则另当别论。不过对于iOS用户而言,这并不多见。

总结

让我们回顾一下:

当有人告诉你凡是在多任务栏中的app都是当前正在运行的,它们都是占用内存或者消耗电池的——这是不对的。

当你按下Home键,app从活动状态变为后台状态并迅速转为挂起状态,此时它不 再占用CPU时间和电量。

一个app可以请求10分钟左右的后台运行时间,以完成长时任务,然后才变为挂起状态。

当内存紧张时,iOS自动移除挂起的app,将它们变为停止运行状态并回收内存。

有5类app-audio、GPS、VOIP、Newsstand(报刊栏)及accessory,以及一些内置的app(如Mail)可以无限制后台运行一直到他们的任务完成。

简单地说:你不需要管理iOS后台任务。系统会自动处理,你需要做的仅仅是写好你的audio、GPS、VOIP、Newsstand和Accessory应用。

0 0
原创粉丝点击