iOS 4是否为第三方开发人员提供“真正的多任务处理”?

自从第一个测试版问世以来,我一直试图找出“真正的”多任务处理是否可行 – 即你是否可以在后台安装一个程序并让它无限期地挂在网络连接上?

我正在考虑使用IM或IRC应用程序。 我自己在iOS 4上编译了一个应用程序,并且没有改变它似乎在后台运行的东西,但是对于所有我知道它只是暂停到内存。

文档说你可以做的最好是请求长达10分钟,但在开发者演示文稿中,他们在后台展示了Skype,然后通知用户有来电。有人知道这一切是如何工作的吗?

Apple的iOS 4开发人员文档非常清楚地概述了这一点。

当您的应用程序关闭或切换时,它几乎立即“暂停”,这意味着操作系统会冻结应用程序的状态。 当用户切换回您的应用程序时,您的代码会一直保持运行。 您无需在应用程序中添加任何代码来执行此操作,只需针对OS 4进行编译即可。

在大多数情况下,上述情况属实。 “暂停”模型可能不适用的原因有两个:

1)如果设备开始内存不足,操作系统将在没有警告的情况下开始终止暂时未切换的暂停应用程序。 这就是为什么你的应用程序最好还是要记住它的状态,所以如果你的应用程序被终止,然后重新打开,用户就不会注意到它,因为它仍然会在它们停止的地方返回。

2)您的应用使用其中一个“后台”API。 这些用于音频回放,VoIP服务或位置服务。 在这种情况下,您的应用程序可以继续在后台运行,但只能访问这些API。 此外,您的应用可以将某些长时间运行的任务指定为需要在暂停或终止应用之前完成的“后台任务”,例如将图片上传到Flickr或渲染video等。

“后台任务”方法不会无限期地覆盖ping服务器,因为任务有一个时间限制,之后它将被强行停止。 需要这种function的应用程序可以像以前一样实现推送通知。

那应该清除这一点。 总而言之,我认为这是在移动设备上进行多任务处理的一种非常优雅的解决方案。

iOS 4应用程序可以运行暂停 。 操作系统将尝试在内存中保留尽可能多的请求应用程序,而所有其他应用程序都将被挂起。

后台运行的应用程序可以访问导航,音频和VOIP等function(但不是即时消息)。 所以看起来你可能运气不好。

– 苹果iPhone 4上的PC World多任务处理

应用程序可以请求后台时间。 阅读文档。 我会说iOS是“受控多任务处理”。

您可以创建一个长时间运行的后台任务,我相信这些任务可以包含网络function。 只需在工作块上设置后台任务标志即可。

https://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

操作系统可以确切地限制你获得多少时间…它会告诉你什么时候你的时间到了,给你一个很好的清理机会。

iOS 4在某种程度上具有“真正的”多任务处理能力。 有两件事需要考虑:

  • UI事件循环是单任务。 因此,只有前端应用程序在UI事件循环上执行。 没什么大不了的:从UI事件循环中分离你的主代码(也许你需要重新设计你的应用程序)。
  • 如果满足某些条件(例如内存不足),操作系统“可能”终止您的应用程序。

目前,这些标准之一是执行时间限制为10分钟(实时不是CPU时间)。 但是我希望这会改变并看到更好的后台应用终止标准(我希望如此)。

除此之外,您可以在后台使用计时器(事件循环) 。

iOS 4.2中甚至没有真正的多任务处理。 因为应用程序只允许完成与状态相关的任务…在很短的时间间隔内然后它将处于暂停状态。如果你将长时间间隔设置后台任务然后……它将表现得意外当您尝试从任何地方运行应用程序时,将不会调用任何方法。

您可能对此博客文章感兴趣, 该博文概述了“多任务处理”如何在iPhone OS 4和Android等系统中运行。

事实上,你可以做到这一点,尽管Apple不允许这样做。 你必须在你的mac中设置一个工具链并使用一些非官方的SDK …

有关详情,请访问http://code.google.com/p/iphone-backgrounder/

您应该使用Push Notifications框架来创建您正在创建的function集!