为什么iOS终止后台应用程序而不是以不同方式处理缺少RAM?

时间:2014-01-01 10:20:23

标签: ios

整个this document Apple提到iOS在某些条件下终止应用程序,最流行的原因似乎是释放一些内存。这会导致无法实现状态恢复的应用程序出现问题 - 某些内容用户正在处理并暂时离开,可能很容易被删除。甚至还有16 page thread on Apple forums用户抱怨这一点。

  • 有谁知道为什么iOS实际上会终止应用而不是将它们占用的内存转移到光盘/交换上?
  • 与其他方式相比,终止实际上是否提供了相当大的性能提升?

5 个答案:

答案 0 :(得分:3)

您所描述的是分页,或更准确地说是页面交换。由于很多原因,iOS版本的BSD Unix不执行分页。以下是一些有根据的猜测:

移动设备太耗电了。

闪存无法处理分页中涉及的流失。闪存每个存储位置具有有限数量的寿命写入周期,并且寻呼将扼杀闪存芯片的寿命。

正如另一张海报所指出的,交换到磁盘会耗尽可用的磁盘空间,这也是有限的。如果你有一个500 GB的驱动器,这不是问题,但在只有16 GB高清和1 GB RAM的设备上这是一个大问题。

答案 1 :(得分:1)

你不会在这里得到这个问题的答案。 Apple没有解释iOS的内部工作原理,其他任何东西都会被猜测。

这是我的猜测:

iOS是一个资源严重受限的环境。内存是有限的,但磁盘空间也是如此 - 一个16GB的iPhone有1GB的RAM,所以“交换到磁盘”并不是真正可以自由应用的东西。你什么时候停止?你怎么知道这还没有完成,但只有有限的交换?

iOS的主要目标始终是优先考虑前台应用的响应能力。除了警告之外的任何事情,然后关闭后台应用程序可能会对此产生太大影响。如果在后台有15个应用程序,那么想象一下处理器负载是否可以很好地为每个进程交换内存?

答案 2 :(得分:0)

因为保存在光盘上的RAM会慢得多。削减程序然后让它运行不佳会更好。我认为这回答了两个问题。

答案 3 :(得分:0)

感谢大家的回复。不过,我不得不做一些研究来回答这个问题。所以我一直在寻找更多的理解,导致“应用程序终止”的决定。我知道,有一些聪明的人在Apple工作,但对我而言,总是有助于理解某些东西是“以这种方式”构建而不是仅仅遵循它的原因。

它变成了这两个问题

  • 为什么iOS会通过分页(交换)来终止应用而不是释放内存?
  • 终止是否会带来可观的性能胜利?

要明白我挖掘了iPhone的历史。有一个可在iTunes上访问的视频,遗憾的是该链接不再有效。无论如何,该视频在iPhone 3G上引入了第一版多任务(或者是3GS?不确定哪个设备开始支持多任务处理)。

如今iPhone设备在硬件方面相当先进。这些实际上比7-10年前的一些台式机更先进,这些台式机已经在很久以前就已经进行了交换。但是,如果我们寻找第一批iPhone版本,那么硬件方面并不是那么先进。 iPhone 3G是620 Mhz ARM和128 RAM。 iPod touch 1gen拥有400mhz ARM。多任务处理应该在当时的所有设备上运行。

如果我们看看iOS,它总是优先考虑动画的流畅度;看看硬件,我认为将snappy和响应式设备与处理交换后台应用程序内存相结合将是一项挑战,因此终止应用程序似乎非常合乎逻辑且非常公平。一年或两年后,Apple提供了API来促进实施状态的恢复。

但是如果我们看一下目前的iPhone和iPad - 他们确实有足够的能力来终止应用程序,只是将内存丢弃在磁盘上,而不会在动画和前台应用程序性能方面出现任何下降。为什么不在最新设备上添加?我认为这对软件行业来说很常见;新功能通常优先于现有工作流程的改进; Apple已经发布了MobileMe,对Retina显示器,AutoLayout,iCloud的支持 - 所以我可以理解已经牺牲了现有功能的很酷的改进。

答案 4 :(得分:0)

通过提供状态恢复,可以轻松解决不提供状态恢复的应用程序的问题。

当系统内存不足时,只需杀死应用程序即可获得巨大的性能提升。考虑到当您启动另一个应用程序时系统通常会耗尽内存,并且必须在启动新应用程序之前完成所有已执行而不是杀死旧应用程序的操作;这是关于性能最关键的时间点。

至少五年后,您被告知当您的应用程序进入后台时,如果您的应用程序重新启动,您应该存储足够的状态以回到该状态。