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

时间:2010-06-09 05:18:20

标签: iphone ios ios4

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

我正在考虑使用IM或IRC应用程序。我自己在iOS 4上编译了一个应用程序,并且没有更改出现以保持在后台运行的东西,但是据我所知,它只是暂停到内存中。

文档说你能做的最好就是请求最多10分钟,但是在开发者演示文稿中,他们在后台展示了Skype,然后通知用户有来电。有人知道这是怎么回事一切都有效吗?

10 个答案:

答案 0 :(得分:10)

似乎答案是否定的。 Skype的API是一种非常特殊的情况,称为“voip”模式,需要特殊的行为,例如标记用于VoIP的套接字。

您可以在后台接收警报通知(例如时间过去)。操作系统严重限制了您处于后台运行状态的时间。

Android的背景模型已经完成,并且在许多方面都更加出色。

Apple有一个名为“在您的应用程序中支持多任务处理”的指南,您可以找到它。

答案 1 :(得分:8)

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

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

大多数情况下都是如此。 “暂停”模式可能不适用的原因有两个:

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

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

“后台任务”方法不包括无限期地ping服务器,因为任务有一个时间限制,之后它将被强制暂停。需要这类功能的应用程序可以像以前一样实现推送通知。

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

答案 2 :(得分:1)

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

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

- PC World Multitasking on Apples iPhone 4

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

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

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

答案 5 :(得分:1)

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

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

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

除此之外,你可以拥有timers (event loops) in background

答案 6 :(得分:1)

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

答案 7 :(得分:0)

您可能对this blog post感兴趣,其中概述了“多任务处理”在iPhone OS 4和Android等系统中的工作原理。

答案 8 :(得分:0)

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

检查http://code.google.com/p/iphone-backgrounder/以获取更多信息

答案 9 :(得分:0)

您应该将Push Notifications框架用于您正在创建的功能集!