仍然有很多人不知道 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)
您是否也有问题需要解决?您需要建议或寻找合适的应用程序吗?请随时通过 部分中的表格与我们联系 辅导,下次我们会回答您的问题。
你好,非常酷的文章,但我不知道你是否有任何技术支持。因为我在晚上睡觉前解决过几次电池问题,而且碰巧在关闭wifi和移动数据的情况下,比另一个情况下关闭wifi且只有3G花费的时间还要多。
不幸的是,经验是,在iOS中,应用程序必须手动关闭,系统不再像以前那样运行。
我将 iPhone 更换为 Windows Phone(三星 Omnia W for 6200,-),系统速度达到了完全不同的水平。
恐怕当 Windows 8 Metro 平板电脑问世时,我也会更换 iPad...
@007 – 是的,如果你将旧的 iPhone3G 与新的 WP 进行比较,那么是的(谁会想到这一点?) WP 会快很多。否则,关于卡卢卡的八卦对你来说并不合适,比较当前的硬件是合适的。我也买了WP7,最后买了4s,这代表着与WP7完全不同的可用性水平。因此,愉快地、无休止地滚动浏览瓷砖。
我完全同意帕哈的观点
我会再次从另一个桶的碎片中做出贡献 - 三星 Galaxy S 和 iPhone 4 - 我会说在年龄方面具有可比性?在 iOS 4 时代,在 Android 以外的地方的可用性和速度方面,Apple 已经很好地解决了与应用程序一起工作的概念,但对于 Android 来说,情况已不再如此。最后,我还是选择了4S,我没有任何抱怨,因为“它就是有效”..而且它工作得很快!
理论是美丽的...但在实践中,我仍然关闭了酒吧中的应用程序;)
谢谢,很有趣,务实,有趣,不缺乏摇摆性和深度。显着凸显了当今年轻人对这个禁忌品牌的痴迷!但感谢她,也感谢这篇文章。
这篇文章完全错误。
正如错误所述,按下“主页”按钮时,应用程序不会退出,而是暂停。 IE。绝对不要从内存中删除,也不要退出。只要暂停运行,iOS 就会给这个应用程序 0% 的 CPU 时间。正如文章中所述,它绝对不会“交换”iDevice 内存中的任何位置。这真的要归功于可以使用应用程序切换的事实。
当手机没有足够的内存来运行具有更高优先级的其他应用程序(通常是另一个应用程序在前台运行)时,该应用程序将从内存中删除。
在第一种情况下,你是对的,这是一个翻译错误。至于交换,我们这里不讨论这个,我们讨论的是操作内存,而不是iOS设备中的存储空间。
应用程序的映像在内存中存储一段有限的时间,直到通过命令再次调用为止(请参阅 13,7 GB 中的 16 GB:2,3 GB 保留给系统和挂起的应用程序)
因此,有必要区分诸如导航、Skype等应用程序,这些应用程序即使在后台仍然保持活动状态,或者某个功能不会结束并继续,例如发送有关其位置的数据或位置信息。或者像 Vokul 在 pord 模式下监听,多任务处理仍然在后台监听。
这些应用程序会耗尽电池电量,因此需要手动关闭它们,而不是等待 iOS。对于其他的则没有必要,只有在应用程序崩溃的情况下才需要。
我不能同意这篇文章。分钟。在第一代 iPad (iOS 1) 上,可以清楚地看到多任务栏中是否有很多“打开”的应用程序,或者只有几个。 iOS 确实尝试清理内存,但这显然还不够——RAM 的尺寸太小可能是其最大的弱点。
所以很大程度上取决于所使用的系统和硬件,很合逻辑的是,在装有 iOS 1 的 iPad 5.0.1 上,它会比在第二代 iPad 上更糟糕
抱歉,伙计,这是对其理想工作方式的描述。不幸的是,现实完全不同,如果你使用苹果产品你就会知道这一点,至少和我一样(即偶尔)。
“你经常会听到一些迷信,认为 iOS 中后台运行的应用程序会填满操作内存。”
这不是迷信,这只是事实。毕竟,您自己在文章中声明了这一点。
“正如我之前提到的,用户永远不需要关闭后台运行的应用程序。”
废话。这只是废话,苹果的宣传,别生我的气。
“但你不必这样做,因为 iOS 会为你做这件事。如果你在后台暂停了一个要求较高的应用程序,例如使用大量 RAM 的游戏,iOS 会在必要时自动将其从内存中删除,然后你可以通过点击应用程序图标来重新启动它。”
不对。情况有些不同。一个典型的例子——我在后台运行要求很高的应用程序,我需要游戏。我启动浏览器,打开几个选项卡 -> 需要更多内存。会发生什么?我在后台保留要求较高的应用程序,相反,浏览器本身会崩溃。如果我手动关闭要求较高的应用程序,浏览器可以长时间工作而不会出现任何问题。
这是实践,而不是理论。令我惊讶的是,作为苹果产品的长期用户,你仍然不知道这一点。
谢谢,这描述得很好并且解释得很好。你帮了我很多;-)♥
首先,我既不支持也不反对 iOS,就像 Android 一样,但是这里有一些奇怪的事情,如果像这里写的那样:“你很少在 iOS 上遇到应用程序崩溃”,那么在 Android 上应用程序崩溃大约每年一次:-P
http://dotekomanie.blog.mobilmania.cz/2012/02/stabilita-ios-vs-android/
是的,但是需要手动关闭应用程序的情况确实很少,我大约用过一次? ;-) 给出 Mobilemania 的比较测试链接是毫无意义的,当我想了解 Google 付费的广告时,我会看一下那里 ;-) 每个人都可以拿到手中的任何 Android 手机,并且它不会干净地运行,也就是说,除了 Galaxy Nexus 之外,它的系统或多或少是定制的。总的来说,android 是一场灾难
@Mek – 我每天都使用苹果产品好几年了,这从来没有发生在我身上,所以你的理论在某种程度上不起作用。
OT:
@redakce – 你可以看到该网站正在不断地被开发或者正在发生一些事情,但我有一种感觉,不需要一周的时间就能让一切正常工作。我真的不再来这里了,因为新的面貌不适合我。至少我在 iPhone 上使用过移动版,但现在根本无法使用 - 这是怎么回事?他们目前没有回复评论中的帖子。
@SteveJSF 不幸的是,事情并不总是按照我们希望的方式发展。至于答案,新的 SEO 插件打破了它们,目前正在解决。
WP-Touch 也因某种原因终止了我们的服务,因此我们决定提出比该插件更好的解决方案。所以你可以期待下一个消息很快:-)
好文章。就实践而言,我想说我同意几件事,并且大多数情况下它都按规定工作,但不幸的是仍然存在编写得不好的应用程序,其行为不正确,然后有像这样的情况一些读者注意到。我认为 Skype 是一个很好的例子,我从实践中知道它仍然在后台运行(这很好,应该如此),但问题是这个应用程序会大量消耗设备的电池,并且我已经看不清了。相反,Facebook、Badoo 等应用程序。它们仍然在后台运行,但它们的消耗几乎难以察觉(至少我没有注意到)。所以我认为错误在于个别应用程序。如果您知道哪些,则只需手动关闭那些就足够了!
因此,惯例是 Facebook 根据需要运行,而 Skype 仅在需要时运行。
好吧,另一方面,如果我需要节省电池,并且我知道我必须尽可能长时间地保持 iPhone“活着”,我也会关闭多任务处理中所有不必要的内容,但大多数情况下它不会产生太大的影响,但如果有必要,我会限制3G、所有移动互联网、WiFi、位置服务、飞行模式、照明强度等。作为日常工作的一部分,我还会在多任务处理中关闭上述应用程序。
因此,我个人认为这篇文章是正确的,不幸的是,一些程序员用他们的应用程序反驳了这些事情,因为他们的应用程序是不正确的,在我看来,对此只有两种解决方案 1. 如果可能不使用该应用程序并找到一个如果可能的话,采用替代方案,或者 2. 如果不可能,请参见例如 Skype,将其写给报告中的给定程序员,并希望他们对此采取措施。
手动禁用应用程序可能毫无意义,但我还是这么做了。我也尝试不关闭应用程序系统,让它们运行(或让它们在后台休眠),电池寿命低了很多,大约三周后还需要重新启动iPad 2,它的反应很慢。所以我手动关闭应用程序,电池持续时间更长,我最近在圣诞节重新启动,它运行良好。
顺便说一句,我在 Mac OS X 中做了同样的事情,我只是关闭我不需要的应用程序(CMD+Q),这比让它在后台休眠并不必要地消耗 RAM(OS X 可以)要好工作得很好)。我的 RAM 很少,只有 8 GB,但是在 7 GB 的 Windows 8 中,系统响应缓慢或交换,在 OS X 中这是相当常见的现象(我从未关闭计算机,我也用 Mac 这样做,所以一个月或更长时间的正常运行时间也不例外,问题是我有时必须重新启动Mac作为预防措施以释放RAM并“加速”,Windows 7不需要这个)。
我更感兴趣的是如何实际爆破应用程序。我遇到的情况是,应用程序(特别是在地理藏宝上)进入了从父服务器加载某些内容的状态,并陷入了该状态。主页按钮起作用了,重新启动后它又回到冻结状态(我离开的地方)。手动退出(到多任务菜单,按住图标并减号关闭)=应用程序消失,重新启动后以冻结的原始状态打开。所以我关闭了所有内容,关闭手机,打开它,双击“主页”,你瞧,应用程序都在那里,就像它们在关闭之前关闭之前一样。重新启动也无济于事——保持原位和鞋面直到变热。唯一有帮助的就是从手机中删除该应用程序,重新启动它,然后将其重新安装在手机上。不知怎的,我没有接受它。
这种多任务管理是有效的,并且很大程度上取决于开发人员来应对这些情况。对于那些有兴趣更详细和专业地描述整个情况的人,我将在这里写下它是如何进行的。
应用程序总共可以响应 6 种状态,这些状态是:
申请将辞职活跃
应用程序进入后台
应用程序将进入前台
应用程序已变为活动状态
应用程序将终止
applicationDidReceiveMemoryWarning
现在我将尝试更详细地描述这些状态。
applicationWillResignActive – 此状态意味着在未来(大约几毫秒)应用程序将退出活动应用程序(即前台应用程序),例如在使用应用程序时收到呼叫时会发生这种情况,但同时这方法,因此即使在应用程序进入后台之前,此状态也会触发,因此您需要考虑这些更改。此方法也适用于,例如,当有来电时,它会暂停正在执行的所有活动,并等待呼叫结束。
applicationDidEnterBackground - 该状态表明应用程序已进入后台,开发人员应该使用此方法挂起所有不一定需要在后台运行的进程并清理内存中未使用的数据和其他进程,例如过期计时器、清除如果应用程序在后台完成连接并不重要,则不一定需要内存加载的图像或终止与服务器的连接。基本上,如果应用程序的某些部分不需要在后台运行,则应使用在应用程序中调用此方法来完全挂起应用程序。
applicationWillEnterForeground – 当应用程序将退出到活动状态时,此状态与第一个状态相反。此应用程序状态仅意味着在接下来的几毫秒内,睡眠应用程序将从后台恢复并出现在前台(应用程序进入前台),开发人员应使用此方法来恢复应用程序处于非活动状态时的任何进程。在后台,应重新建立与服务器的连接,重置计时器,将图像和数据加载到内存中,并且可以在用户再次看到加载的应用程序之前恢复其他必要的进程。
applicationDidBecomeActive – 该状态表示应用程序恢复到前台后刚刚变为活动状态,这是一个方法,可用于对用户界面进行额外的调整或将 UI 恢复到原始状态等。此方法实际发生当用户已经可以在显示器上看到时,因此有必要从资产负债表中确定该方法和之前的方法中发生了什么。它们被一个接一个地调用,相差几毫秒。
applicationWillTerminate - 此状态发生在应用程序终止前几毫秒,即应用程序实际终止之前。无论是在多任务处理中手动还是在关闭设备时。此方法应用于保存已处理的数据并结束所有活动并删除不再需要的数据。
applicationDidReceiveMemoryWarning - 这是这里经常讨论的一个条件,如果有必要,iOS 会从内存中删除应用程序(如果它不必要地使用系统资源)。我不知道iOS对后台应用程序做了什么,但如果它需要一个应用程序向其他进程释放资源,它会通过内存警告提示它释放它所持有的资源。所以在应用程序中调用该方法,开发人员应该实现它,以便应用程序放弃其拥有的内存,保存已处理的数据并删除内存中不需要的数据,否则充分释放内存。确实,许多开发人员(例如初学者)不会考虑这些事情或不理解它们,然后他们的应用程序可能会危及电池寿命和/或不必要地消耗系统资源,即使在后台也是如此。我不知道如果应用程序在收到内存警告后不执行任何操作并继续像以前一样消耗系统资源,iOS 会如何表现。
这几个状态和相关方法是 iOS 中整个“多任务处理”的背后......如果开发人员不忽略对应用程序最小化时将在用户设备上抛出的内容负责,那么它是一个很棒的系统或者从系统中获取警告等等......
我希望这个简短的描述可以帮助您了解应用程序如何使一切顺利进行。所以几乎可以说这是用户错误使用的错误,这可以理解为——如果你大量使用业余开发者提供的大部分免费应用程序,你的 iOS 设备将比使用大量应用程序运行得更差。来自经验丰富或专业开发人员的免费和付费应用程序的数量。这并不是说两个圈子都没有例外。例如,foursquare 的行为相当奇怪且要求很高,同时,人们会期望他们是非常熟练的开发人员,在内存和电池管理上投入大量时间,但事实恰恰相反。 4SQ最大的问题是与服务器的通信,经常挂起并且不堪重负。这只是一个例子,即使是知名的应用程序也会出现问题,但这并不能改变4SQ是一项伟大服务的事实。
苹果玩得开心!! :)
我们在获得作者许可的情况下将信息添加到文章中;-)
抱歉,段落之间到处都是 ENTER,他们可以在这里做一些事情,以便评论至少有一点丰富的文本格式。
ArnieX:感谢您的评论!
法拉米尔:我只是关于你的问题,我不知道这对你的情况是否有帮助,但从我自己的经验来看,如果你关闭应用程序(在多任务处理中),它需要几秒钟的时间才能关闭,所以如果您将其关闭,我建议您等待几秒钟(我大约等待 10 秒以确保),直到它完全完成,然后我才会再次启动它。
不客气;)如果我有机会做出贡献,我将很乐意提供帮助。
Meeb 是怎么回事,当我通过它登录 ICQ 或 FB 聊天时,它会在 10 分钟后自动注销,然后我就离线了还是继续工作?感谢您的澄清:P
十分钟后,应用程序与 Internet 的连接就会中断。但是,您仍将在 Meeba 服务器上在线,并且如果有人给您写信,您将收到推送通知。重新打开应用程序后,一会儿就会建立连接,您可以继续愉快地聊天。
因此,如果我正确理解了您链接的文章,那么统计数据仅涉及应用程序启动时的崩溃,这在可能发生崩溃的情况中所占的比例相当小。因此,在我看来,从这项“研究”中不可能得出iOS不太稳定的结论。此外,摘自《福布斯》的文章的译者忘记提及,提供应用程序崩溃数据的公司得到了 Google 等公司的支持(“Crittercism,得到了 Google Ventures 的支持……”)。