关闭广告

仍然有很多人不知道 iOS 中的多任务处理是如何工作的。然而,首先需要指出的是,这并不是真正的多任务处理,而是一个非常智能的解决方案,不会给系统或用户带来负担。

人们经常会听到一种迷信,认为iOS中后台运行的应用程序会占用操作内存,从而导致系统速度变慢和电池寿命缩短,因此用户应该手动将其关闭。多任务栏实际上并不包含所有正在运行的后台进程的列表,而仅包含最近启动的应用程序。因此,除了少数情况外,用户不必担心后台运行的进程。当您按下“主页”按钮时,应用程序通常会进入睡眠状态或关闭,以便它不再加载处理器或电池,并在必要时释放必要的内存。

当您有数十个进程运行时,这并不是成熟的多任务处理,只有一个应用程序始终在前台运行,必要时会暂停或完全关闭。只有少数辅助进程在后台运行。这就是为什么您很少会在 iOS 上遇到应用程序崩溃的原因,例如 Android 因运行用户必须处理的应用程序而不堪重负。一方面,这使得使用设备变得不愉快,另一方面,它会导致例如启动缓慢和应用程序之间的转换缓慢。

应用程序运行时类型

iOS 设备上的应用程序处于以下 5 种状态之一:

  • 跑步: 应用程序已启动并在前台运行
  • 背景: 它仍在运行但在后台运行(我们可以使用其他应用程序)
  • 暂停: 仍在使用 RAM 但未运行
  • 不活动: 应用程序正在运行但间接命令(例如,当您在应用程序运行时锁定设备时)
  • 未运行: 应用程序已终止或尚未启动

当应用程序进入后台以免打扰时,就会出现混乱。当您按“主页”按钮或使用手势关闭应用程序 (iPad) 时,应用程序将进入后台。大多数应用程序都会在几秒钟内挂起(它们存储在 iDevice 的 RAM 中,因此可以快速启动,它们不会给处理器加载太多,从而节省电池寿命)您可能会认为,如果应用程序继续使用内存,那么您就可以了手动删除它以释放它。但你不必这样做,因为 iOS 会为你做这件事。如果您在后台暂停了要求较高的应用程序,例如使用大量 RAM 的游戏,iOS 会在必要时自动将其从内存中删除,您可以通过点击应用程序图标来重新启动它。

这些状态都不会反映在多任务栏中,面板仅显示最近启动的应用程序列表,无论应用程序是停止、暂停还是在后台运行。您可能还注意到当前正在运行的应用程序没有出现在“多任务处理”面板中

后台任务

通常,当您按下主页按钮时,该应用程序将在后台运行,如果您不使用它,它会在五秒钟内自动暂停。因此,例如,如果您正在下载播客,系统会将其评估为正在运行的应用程序,并将终止延迟十分钟。最迟十分钟后,该进程将从内存中释放。简而言之,如果完成下载的时间不超过 10 分钟,您不必担心按主页按钮会中断下载。

无限期后台运行

如果不活动,系统会在五秒内终止应用程序,如果有下载,则会延迟十分钟终止。然而,有少数应用程序需要在后台运行。以下是一些可以在 iOS 5 中无限期地在后台运行的应用程序示例:

  • 播放声音且必须中断一段时间的应用程序(在通话期间暂停音乐等),
  • 跟踪您位置的应用程序(导航软件),
  • 接收 VoIP 呼叫的应用程序,例如,如果您使用 Skype,即使应用程序在后台,您也可以接听呼叫,
  • 自动下载(例如报亭)。

如果所有应用程序不再执行任务(例如后台下载),则应关闭它们。但是,也有一些例外情况会在后台持续运行,例如本机邮件应用程序。如果它们在后台运行,则会占用内存、CPU 使用率或缩短电池寿命

允许无限期在后台运行的应用程序可以在运行时执行任何操作,从播放音乐到下载新的播客剧集。

正如我之前提到的,用户永远不需要关闭后台运行的应用程序。唯一的例外是当后台运行的应用程序崩溃或无法正确从睡眠状态唤醒时。然后用户可以在多任务栏中手动关闭应用程序,但这种情况很少发生。

因此,一般来说,您不需要管理后台进程,因为系统会自行处理它们。这就是为什么 iOS 是一个如此新鲜且快速的系统。

从开发者的角度来看

作为多任务处理的一部分,应用程序可以对总共六种不同的状态做出反应:

1.applicationWillResignActive

翻译过来,这个状态意味着该应用程序将在未来(几毫秒的时间)辞去活动应用程序(即前台应用程序)的角色。例如,在使用应用程序时收到呼叫时会发生这种情况,但同时,此方法也会在应用程序进入后台之前导致这种状态,因此您需要考虑这些更改。此方法也适用于,例如,当有来电时,它会暂停正在执行的所有活动,并等待呼叫结束。

2.应用程序DidEnterBackground

该状态表明应用程序已进入后台。开发人员应该使用此方法挂起所有不一定需要在后台运行的进程,并清除内存中未使用的数据和其他进程,例如到期计时器、从内存中清除不一定需要的已加载图像或关闭与服务器的连接,除非应用程序在后台完成连接至关重要。当在应用程序中调用该方法时,如果不需要应用程序的某些部分在后台运行,则它本质上应该用于完全挂起应用程序。

3.应用程序将进入前台

此状态与第一个状态相反,在第一个状态中应用程序将退回到活动状态。该状态仅意味着正在睡眠的应用程序将从后台恢复并在接下来的几毫秒内出现在前台。开发人员应该使用此方法来恢复应用程序在后台时不活动的任何进程。应重新建立与服务器的连接,重置计时器,将图像和数据加载到内存中,并且可以在用户再次看到加载的应用程序之前恢复其他必要的进程。

4. applicationDidBecomeActive

该状态表示应用程序恢复到前台后刚刚变为活动状态。这是一种可用于对用户界面进行额外调整或将 UI 恢复到原始状态等的方法。这实际上发生在用户已经在显示器上看到应用程序的那一刻,因此有必要谨慎确定此方法和前一个方法中会发生什么。它们被一个接一个地调用,相差几毫秒。

5. 应用程序将终止

此状态发生在应用程序退出前几毫秒,即应用程序实际终止之前。无论是在多任务处理中手动还是在关闭设备时。该方法应用于保存已处理的数据、结束所有活动并删除不再需要的数据。

6. 应用程序DidReceiveMemoryWarning

这是讨论最多的最后一个状态。如果应用程序不必要地使用了系统资源,它负责在必要时从 iOS 内存中删除该应用程序。我不知道iOS具体对后台应用程序做了什么,但如果它需要一个应用程序向其他进程释放资源,它会通过内存警告提示它释放它拥有的任何资源。所以在应用程序中调用这个方法。开发人员应该实现它,以便应用程序放弃已分配的内存,保存正在进行的所有内容,从内存中清除不必要的数据,并以其他方式充分释放内存。确实,许多开发人员,甚至是初学者,都没有考虑或理解这些事情,然后他们的应用程序可能会威胁电池寿命和/或不必要地消耗系统资源,即使在后台也是如此。

判决书

这六种状态及其相关方法是iOS中所有“多任务”的背景。这是一个很棒的系统,只要开发人员不忽视这样一个事实,即需要对应用程序在用户设备上抛出的内容(如果用户被最小化或收到系统警告等)负责。

来源: macworld.com

作者: 雅库布·波扎雷克、马丁·杜贝克 (ArnieX)

 
您是否也有问题需要解决?您需要建议或寻找合适的应用程序吗?请随时通过 部分中的表格与我们联系 辅导,下次我们会回答您的问题。

.