一次一个应用程序

一周后,iPhone SDK最具争议的方面似乎是第三方应用只能在最前端运行时的限制 - 一旦用户返回主屏幕或切换到另一个应用程序,最前面的应用程序需要退出。

您可能希望应用程序在后台继续运行的原因有很多(或者,至少,让一个不露面的帮助程序继续在后台运行但是在目前的iPhone SDK中也不允许这样做。)

Apple的内置应用程序清楚地表明了其中一些原因在后台运行:电话,邮件,Safari和iPod换句话说,iPhone的默认底座中的应用程序因此,第三方应用程序将无法在后台定期检查来自服务器的新邮件,例如Mail它也不能像iPod那样继续在后台播放音频文件。

不过,Apple目前的其他iPhone应用程序也没有在后台运行(与之相反我上周的猜测,SMS和时钟应用程序不在后台运行They post and receive notifications while not frontmost via other means; however, I do not know whether these means are currently exposed in the iPhone OS APIs to third parties.) One of the我注意到的第一件事与iPhone相比,UI中没有关于当前正在运行哪些应用程序的指示,或者当您点击主页按钮时当前应用程序会发生什么没有启动或退出的概念 - 只有转换通过尽可能简短地保持发射和退出时间来维持这种错觉General rule: When an iPhone app quits, whatever you’re currently doing is saved; when it re-launches, whatever you were doing is restored.

Why has Apple imposed this limitation? Easy: the iPhone is severely resource constrained电池,RAM和CPU周期都受到严格限制如果第三方应用程序可以在后台运行,那么这三个应用程序都可能受到影RAM would suffer for sure; all running apps consume memoryiPhone只有128 MB的RAM,没有交换空间CPU performance and battery life would suffer when background apps do something — and if they’re not doing anything, what’s the point of keeping them running? I noticed a significant increase in battery life after I switched the Mail app’s auto-checking interval from 15 minutes to 60 minutes那只是一个应用程序。

iPhone用户界面的极其简单性部分源于完全缺乏用于管理流程的界面元素。1There is no task manager or memory meter; if you want to know what’s running, the answer is simply whatever app it is that you’re looking at即使是受祝福的应用程序在后台运行,如Mail和Safari,如果系统需要更多内存用于最前端的应用程序,必须随时准备退出(这就是为什么Safari的标签偶尔会消失 - 每个标签的URL都会被记住,但是下次Safari启动时必须重新加载内容。)

And, the iPhone engineering team has gone to extraordinary lengths to make sure these background apps have a minimal CPU/battery/memory footprint while they are running如果你不允许第三方创建具有后台功能的应用程序,那么称他们为伪君子,但Apple仅为少数旗舰应用程序使用后台进程(例如,iPod应用程序,只要如果您在播放音轨时切换到另一个应用程序,则在后台运行Otherwise, it too quits on switch.)

可以Apple allow third-party apps to run in the background? Of course这是一种权衡,技术先进的用户为了典型用户的利益而付出代价所述好处就是这样:用户不必担心通过从App Store安装新应用程序,他们将放慢手机速度或延长其电池寿命What’s the alternative? A “don’t install or launch too much crap” policy?

这就是现在的情况并不意味着这就是它永远如此五个月前,Apple甚至还没有官方消息说甚至会有原生iPhone SDK此外,请记住,首先设置严格的限制要比在其他方面放松它们要容易得多。2

简而言之,你的iPhone放在口袋里时不会做太多iPhone是由您的行为驱动的,并且,出于资源保护的目的,在设计上,在后台,期间做的很少。


  1. 缺乏“计算​​机管理碎片”,借用爱德华图夫特的说法↩︎

  2. For what it’s worth, though, I don’t expect this “no background apps” policy to be rescinded until iPhones ship with significantly more RAM and significantly faster CPUs. ↩︎