我知道,显然,关闭iPhone上的应用程序以节省电池不是一个好主意。我已阅读过类似的问题和解答,例如,强制关闭应用程序是否在iOS设备上有任何好处?但它仍然不适合我。有时我发现有50多个应用正在运行,因此不关闭它们是没有意义的。
也许我有点老套了,您只是不能教老狗新的花样,但是这里有人可以解释一下为什么最好让所有这些应用程序都运行吗?当我说“解释”时,我的意思是外行,以便我能理解。
我知道,显然,关闭iPhone上的应用程序以节省电池不是一个好主意。我已阅读过类似的问题和解答,例如,强制关闭应用程序是否在iOS设备上有任何好处?但它仍然不适合我。有时我发现有50多个应用正在运行,因此不关闭它们是没有意义的。
也许我有点老套了,您只是不能教老狗新的花样,但是这里有人可以解释一下为什么最好让所有这些应用程序都运行吗?当我说“解释”时,我的意思是外行,以便我能理解。
Answers:
你不是一个人。人们只是习惯了台式计算机的习惯,可以理解的是,他们将这些习惯带到了iPhone和iPad上。
但是,让我尝试用一个类比解释一下:
想象这是一个炎热的日子,而您不在园艺中。你口渴了,于是你走进厨房,拿起一大杯,放一些冰,然后加水。然后,您将其喝掉一半,其余的倒在水槽中,然后再返回室外。不久之后,您又感到口渴,于是您回到厨房,抓起同一杯玻璃,在其中放一些冰,然后加水。同样,您只喝一半,其余的倒入水槽!
上面的工作流程实际上没有任何意义。你为什么不随身带玻璃杯呢?而且,您不仅要排空水,而且还要花费更多的时间和精力来再次取水。
同样,当您退出某个应用程序时,实际上是在消耗一些电池电量(例如,从RAM中清除它等),然后在以后再次使用时,必须再次启动并将其加载回RAM中。
因此,在大多数情况下,最好让应用保持打开状态。即使它们是打开的,它们实际上只是处于一种暂停模式,不使用任何电池电量。是的,该应用程序仍加载在RAM中并占用空间,但实际上并没有做任何事情 -它只是在休眠中。而且,因为在这种状态下它不使用任何电池电量,所以从节省电池的角度来看,退出它没有任何优势- 尤其是如果它是一个应用程序,您知道您将在一整天内反复使用。
强制退出应用程序实际上也没有优势,因为如果需要/需要释放内存,iOS本身会为您执行此操作。因此,如果您有50个打开的应用程序并且它们保持打开状态,则iOS并没有达到需要关闭其中任何一个以释放内存的程度。
现在,像其他任何东西一样,规则总是存在例外情况(例如必须执行后台任务的应用程序)。例如,当您在用手机做其他事情时播放音乐,或者在后台下载内容,或者计算您一天要走多少步等等。例如,iOS具有一个管理后台应用程序/任务的高效过程,如果您选择退出这些程序,则基本上是在说您不信任操作系统正确完成其工作。
因此,请在需要时随时退出应用程序(例如,因为它已冻结等),但不要这样做以节省电池电量。实际上,如果您这样做了,您将获得相反的效果并全天使用更多的电池电量!
摘要
应用程序切换器中的大多数应用程序都将处于暂停状态 -这意味着它们不处于:在屏幕上可见,正在执行代码,使用CPU或GPU或电池。然而,他们都仍然驻留在内存中,直到它们被清除(如有必要)由系统来释放内存:
已暂停 -该应用程序在后台运行,但未执行代码。系统会自动将应用程序移至此状态,并且在执行此操作之前不会通知它们。挂起时,应用程序仍保留在内存中,但不执行任何代码。当发生内存不足的情况时,系统可能会清除挂起的应用程序而不会发出通知,从而为前景应用程序腾出更多空间。
来源:请参阅此答案末尾的第一个参考链接中的表2-3。
在任何给定的时间点,iPhone上实际运行的唯一应用程序是活动应用程序(即,在屏幕上可见的应用程序)和其他在后台运行的应用程序。(注意:对于某些尚属暂时的例外情况,对于那些仍需要时间来完成它们在活动状态下已经启动的代码的应用程序,通常只有几秒钟的时间,但理论上可以延长一分钟以上。) 。
参考文献
提供的答案是准确的,我只想从iOS开发人员的角度进行澄清。
iOS旨在管理尽可能多的事物,因此您(和开发人员)不必担心它们。最终结果是跨应用程序(包括Apple的应用程序)采取了某种程度一致的方法(甚至有时Apple自己也犯了一些错误)。
话虽如此,前提是:
说了这么多,人们就以为大多数用户关闭应用程序是为了希望延长电池寿命,而这种印象是,通过关闭设备,可以减少维持这些应用程序运行的能源消耗。
事实是,在iOS上几乎并非如此。当您按下主屏幕时,该应用将被暂停,并且不再使用其他应用可能需要的资源。如果一个新的应用程序(甚至iOS)需要该内存,它会自行处理它,但仅在需要时才会处理。
您一遍又一遍地关闭应用程序,这迫使iOS进行真正卸载应用程序,保存其状态等潜在的昂贵任务,而另一个问题是,当您重新打开应用程序时,所有内容都必须还原并且,根据应用程序的复杂性,必须从存储中读取很多内容,直到手机的主内存,等等。如果您只是让应用程序保持其“已暂停”状态,则可以避免所有这些额外的工作。
但是 ……
在某些情况下(它们很少见但并非罕见),您想杀死行为异常的应用程序。示例包括(但不限于):处理背景音频或异步服务(例如位置)的应用(其中,应用要求输入位置,iOS必须去询问周围的位置,例如,如有必要,通过发射GPS) ,视频流等
我遇到了无数实例,例如Lyft,United Airlines甚至Twitter,最终都处于崩溃状态(或者根本无法正常工作),这可能是因为您的网络状况很差(iOS确实很糟糕)从过去3-4个发行版中的某些不良网络中恢复),或者网络根本无法正确响应。
随着时间的流逝,大多数这些问题往往都会消失,并且该应用会重新开始运行;但如果你真的需要的应用程序的工作,现在,那么你必须继续前进,并支付其杀死它,并从头开始重新启动它的价格。这样做会消耗更多的电池,但是,嘿,您需要它。
如果这令人困惑,我可以给您打个比喻,因为这就是我们一直在做的事情。
我知道汽车技术已经进步,这不再是一个很好的例子,而是在这里与我一起玩。
点火汽车的引擎过去不仅消耗空转,还消耗更多的燃料。当汽车使用化油器而不是喷油器时,情况更糟。这就是为什么在红灯停止时关闭引擎的原因,理论上可以比空转一分钟消耗更多的燃料。较新的汽车具有效率更高的机制,可以使引擎停止运转,但仍处于半启动状态(这里不要太偏爱汽车)。
关闭应用程序,就等于一个人在每个停车灯处都将汽车关掉。而不是让它闲置直到再次需要它,通常是几秒钟后。
这个比喻不是完美的,因为事实是,闲置的汽车仍在使用燃料,而暂停的应用程序却没有。但是,在电话眼中,他们没有使用任何与内存/电池有关的东西(显然,只要他们没有任何活动的后台处理)。
基本上,您每次关闭应用程序时都会关闭引擎,并且不会让iOS的“智能”机制使引擎空转,因此,当指示灯变为绿色时,您只需按加速器并引擎的运转速度比100%停止的速度还要快。从停止状态启动发动机不仅消耗燃料,还消耗更多的功率,您需要转动启动器,以便发动机可以起动,喷射燃料并产生火花,因此……这是幕后工作。应用就像引擎。:)
打个比方...与您的汽车类似,如果您在白天需要进行太多次停车并继续停止和起动发动机,那么电池完全耗尽的时候就会到来。如果您在两次停车之间行驶时的充电时间不足以恢复每次启动发动机时从电池吸收的大量能量,则可能会发生这种情况。此外,这对于起动器和总的气体消耗都是不利的。这就是为什么许多送货卡车司机会在短暂停留期间保持发动机空转的原因。
这个比喻是IMO,类似于节省内存的神话。
只是为了讨论而在这里提出了不同的意见。这个概念具有一定程度的真实性,但是一旦您打开了一定数量的应用程序,则很可能会开始看到保持暂停状态的收益递减。
显然,您打开的应用程序越多,ram的使用就越多。通常,内存中的每个应用程序都会划分为应用程序本身当前正在使用的内存,该应用程序希望拥有的内存以及操作系统实际允许该应用程序使用的内存,这将为您提供该应用程序的最终内存量允许使用。该应用程序将其内存的一部分保留为要使用的内存的原因是,因为该应用程序可能需要增加其堆空间,但并不一定要立即执行此操作,因为这对垃圾收集器不利具有大堆(大堆=较长的垃圾回收),因此该应用程序将预留一部分当前未使用的内存,但在需要时可以由应用程序专用。
假设操作系统最多允许我的应用程序使用700mb,并且该应用程序本身预留了300mb的内存,如果需要,可以将400mb留给我的应用程序使用,但是随后另一个应用程序打开并需要一些内存;操作系统会查看所有不同的应用程序,并确定是否可以从其他应用程序中提取一些内存并将其用于新应用程序,在这种情况下,它可能会决定从我的应用程序允许的内存中占用150mb并将其分配给新应用程序,需要交换内存以提供新的应用程序内存来使用(将其视为企业资金的重新分配),您打开的应用程序越多,操作系统实际要做的工作就越多。它可以虹吸哪个应用程序的内存以提供新的应用程序内存。
从这个意义上讲,每个打开并挂起的应用程序都会增加此过程的复杂性,使其占用更多的CPU资源,最终打开潜在的应用程序所需要的电池电量将比不关闭其他应用程序节省的电池电量更多。
现在提醒您,所有这些都没有考虑到,除非您真正终止了应用程序,否则可能会运行正在运行的后台服务,这些后台服务会吞噬处理能力,例如,设置为在计时器上通知您的通知等。应用程序不使用真正的后台服务,而是实际使用来自诸如Firebase之类的服务的推送通知,不需要任何时候打开该应用程序。
要考虑的另一件事是,您不断打开的应用程序越多,在操作系统经过并清理内存以使其更干净和更有效地布置之前,内存最初将更加分散,这本身也消耗了处理能力,并且应用程序占用的内存越多,此过程对您的设备的消耗就越大。
综上所述,除非打开了太多应用程序,否则打开应用程序通常更有效,但是我不确定要打开多少个应用程序才能达到此阈值(如果存在)。
资料来源:
适用于Mono的SGen垃圾收集器:http: //www.mono-project.com/docs/advanced/garbage-collector/sgen/
iOS和Android Xamarin应用程序的内存探查器概述,显示了应用程序管理内存的方式(工作集,私有字节,分配的内存等) 。https://blog.xamarin.com/say-hello-to -xamarin-profiler /
简洁版本: 更好,因为该操作系统旨在将其设计得更好,以至于用户希望保持应用程序处于打开状态(或处于“挂起”状态),以便以后收集有关您的操作的更多信息[*]如果需要的话。
较长的版本: “挂起”的应用程序将其状态保存在内存中,因此一旦您要启动它们进行备份,将一切加载回去的过程将需要较少的时间来处理过程,并且几乎不使用存储单元。您可能无法知道您的应用是否在后台做其他事情,而在很多情况下,它们却坐在那里收集您的数据。
[*]要详细说明您所收集的数据...内存中存储的应用程序可以“挂起”或在后台激活。作为设备所有者,您不知道(如果您不了解其他应用程序来主动扫描CPU使用情况),该应用程序实际上在做什么。从安全的角度来看,我建议您在接下来的10分钟内关闭所有您将不使用的应用程序。
PS此做法在Android设备以及Btw ...