很多人以为「在 iOS 上双击 Home 键之后底部弹出的一栏应用是当前 iOS 所有正在运行(包括后台运行)的程序,它们仍然会占用内存并耗费电量。要最大化设备的性能,最好手动关闭它们。」
但这是错误的,事实上这栏应用只是「用户最近使用的应用列表」而非「所有正在运行的应用列表」。除非在特殊情况下,用户不需要去手动管理这个列表。
iOS 应用有 5 中执行状态。分别是:
没有运行 - 应用处于终止状态,没有运行;
不活跃 - 应用处于前台,但不接受事件操作(例如,当前应用处于活跃时,用户进行了锁屏操作);
活跃 - 应用处于 “使用中” 的正常状态;
后台 - 应用没有显示在屏幕上,但仍在执行代码;
挂起 -应用仍然驻留在内存中,但不执行代码;
「不活跃」和「活跃」这两种状态比较清楚,这里需要讨论的是,当一个应用从「活跃」切换到「后台」,再到「挂起」,最后到「停止运行」这个过程中发生了什么。
当你点击 Home 键时,应用会从「活跃」切换到「后台」,并且大多数应用会在几秒钟后从「后台」切换到「挂起」状态。
「挂起」状态的应用仍留在内存中,这样当你返回这个应用时可以快速使用。但它们并不使用处理器计算,也并不耗电。
你可能会认为,如果应用停留在内存中,你需要以某种方式时结束它以节省内存。实际上不需要,因为 iOS 会自动帮你做到。如果有很多应用停留在内存中,而你打开了一个很占内存的应用,比如大游戏,iOS 会自动清理这些「挂起」的应用并将他们切换到「没有运行」状态。也就是把它们完全从内存中清除,下次当你打开它们时,相当于重新打开这个应用。
可能会让人们比较困惑的是:上述的所有情况都不会影响到你在多任务栏中看到什么。多任务栏中显示的只是你最近使用的应用程序的列表,而不论这些应用是处于「后台」「挂起」或「没有运行」状态。你可能还会注意到了,当前正运行的应用并不出现在「多任务栏」中。
多任务运行
当应用会从「活跃」切换到「后台」状态,大多数应用会在几秒钟内从「后台」切换到「挂起」状态。但应用也可以通过申明自己是「后台任务」来要求延长「后台」状态。举个例子,我用自己最喜欢的播客应用 Instacast 下载比较大的播客节目,当 Instacast 处于「活跃」状态时开始下载,如果点击 Home 键,Instacast 会在后台运行 5 秒钟左右,然后就进入了「挂起」状态,就会中断下载播客节目,这个节目可能需要 5 分钟甚至更长一点时间才能下载完。
但 iOS 允许 Instacast 申明下载任务是「后台任务」,这样就可以获得额外的时间在后台运行,完成下载任务。但应用申请额外的「后台运行」时间并不是无限长的。一个应用可以获得 10 分钟的额外后台运行时间,然后这个应用会被 iOS 强制切换到「挂起」状态。所以,你自己仍然不用去担心。
无限制后台运行
所有的 iOS 应用都有 5 秒钟的后台运行时间。有一些应用可以申请 10 分钟的额外后台运行时间。只有非常少的一些应用可以真正不限时长的在后台运行。
在 iOS 5 中只允许 5 中应用可以不限制时长的在后台运行:
在后台播放音频的应用。例如,Instacast 在后台播放音频播客时;
在后台追踪地理位置的应用。例如,当你在使用其他应用时,仍然可以从 TomTom 导航软件收到语音提示;
在后台等候接收 VOIP 语音通话的应用。例如,如果你在 iOS 上使用 Skype ,即便当前不在用 Skype 也能接收到语音通话请求;
「新闻报刊」中的应用下载的新的内容;
可以在后台持续从外接设备上接收更新的应用。
综上,一个编写良好的 iOS 应用会在不使用时会进入「挂起」状态。当 Instacast 完成了下载,就会进入「挂起」状态。有一些 iOS 预装的应用会持续地在后台运行,比如,「Mail」。但对普通用户来说,根本不需要手动去管理后台运行的程序。只有极少数情况下,后台运行的程序会失控,没法正常终止,但这属于异常的情况了。
但这是错误的,事实上这栏应用只是「用户最近使用的应用列表」而非「所有正在运行的应用列表」。除非在特殊情况下,用户不需要去手动管理这个列表。
iOS 应用有 5 中执行状态。分别是:
没有运行 - 应用处于终止状态,没有运行;
不活跃 - 应用处于前台,但不接受事件操作(例如,当前应用处于活跃时,用户进行了锁屏操作);
活跃 - 应用处于 “使用中” 的正常状态;
后台 - 应用没有显示在屏幕上,但仍在执行代码;
挂起 -应用仍然驻留在内存中,但不执行代码;
「不活跃」和「活跃」这两种状态比较清楚,这里需要讨论的是,当一个应用从「活跃」切换到「后台」,再到「挂起」,最后到「停止运行」这个过程中发生了什么。
当你点击 Home 键时,应用会从「活跃」切换到「后台」,并且大多数应用会在几秒钟后从「后台」切换到「挂起」状态。
「挂起」状态的应用仍留在内存中,这样当你返回这个应用时可以快速使用。但它们并不使用处理器计算,也并不耗电。
你可能会认为,如果应用停留在内存中,你需要以某种方式时结束它以节省内存。实际上不需要,因为 iOS 会自动帮你做到。如果有很多应用停留在内存中,而你打开了一个很占内存的应用,比如大游戏,iOS 会自动清理这些「挂起」的应用并将他们切换到「没有运行」状态。也就是把它们完全从内存中清除,下次当你打开它们时,相当于重新打开这个应用。
可能会让人们比较困惑的是:上述的所有情况都不会影响到你在多任务栏中看到什么。多任务栏中显示的只是你最近使用的应用程序的列表,而不论这些应用是处于「后台」「挂起」或「没有运行」状态。你可能还会注意到了,当前正运行的应用并不出现在「多任务栏」中。
多任务运行
当应用会从「活跃」切换到「后台」状态,大多数应用会在几秒钟内从「后台」切换到「挂起」状态。但应用也可以通过申明自己是「后台任务」来要求延长「后台」状态。举个例子,我用自己最喜欢的播客应用 Instacast 下载比较大的播客节目,当 Instacast 处于「活跃」状态时开始下载,如果点击 Home 键,Instacast 会在后台运行 5 秒钟左右,然后就进入了「挂起」状态,就会中断下载播客节目,这个节目可能需要 5 分钟甚至更长一点时间才能下载完。
但 iOS 允许 Instacast 申明下载任务是「后台任务」,这样就可以获得额外的时间在后台运行,完成下载任务。但应用申请额外的「后台运行」时间并不是无限长的。一个应用可以获得 10 分钟的额外后台运行时间,然后这个应用会被 iOS 强制切换到「挂起」状态。所以,你自己仍然不用去担心。
无限制后台运行
所有的 iOS 应用都有 5 秒钟的后台运行时间。有一些应用可以申请 10 分钟的额外后台运行时间。只有非常少的一些应用可以真正不限时长的在后台运行。
在 iOS 5 中只允许 5 中应用可以不限制时长的在后台运行:
在后台播放音频的应用。例如,Instacast 在后台播放音频播客时;
在后台追踪地理位置的应用。例如,当你在使用其他应用时,仍然可以从 TomTom 导航软件收到语音提示;
在后台等候接收 VOIP 语音通话的应用。例如,如果你在 iOS 上使用 Skype ,即便当前不在用 Skype 也能接收到语音通话请求;
「新闻报刊」中的应用下载的新的内容;
可以在后台持续从外接设备上接收更新的应用。
综上,一个编写良好的 iOS 应用会在不使用时会进入「挂起」状态。当 Instacast 完成了下载,就会进入「挂起」状态。有一些 iOS 预装的应用会持续地在后台运行,比如,「Mail」。但对普通用户来说,根本不需要手动去管理后台运行的程序。只有极少数情况下,后台运行的程序会失控,没法正常终止,但这属于异常的情况了。