自从第一个测试版问世以来,我一直试图找出“真正的”多任务处理是否可能——即你能把一个程序放在后台并让它无限期地挂在网络连接上吗?
例如,我正在考虑 IM 或 IRC 应用程序。我自己在 iOS 4 上编译了一个应用程序,并且没有改变它似乎在后台运行的任何东西,但据我所知,它只是暂停到内存中。
文档说你能做的最好的就是请求最多 10 分钟,但在开发人员演示中,他们展示了坐在后台的 Skype,然后通知用户有电话进来。有人确定这一切是如何工作的吗?
看来答案是否定的。Skype 的 API 是一种非常特殊的情况,称为“voip”模式,并且需要特殊行为,例如将套接字标记为用于 VoIP。
您可以在后台接收警报通知(例如经过的时间)。您处于后台运行状态的时间量受到操作系统的严格限制。
Android 的背景模型是完整的,并且在许多方面都更好。
Apple 有一个名为“在您的应用程序中支持多任务处理”的指南,您应该可以找到它。
Apple 的 iOS 4 开发者文档非常清楚地概述了这一切。
当您的应用程序关闭或切换离开时,它几乎立即“暂停”,这意味着操作系统冻结了应用程序的状态。当用户切换回您的应用程序时,您的代码会继续在它停止的地方运行。您无需向应用程序添加任何代码即可执行此操作,只需针对 OS 4 进行编译即可。
上述情况在大多数情况下都是正确的。“暂停”模型可能不适用的原因有两个:
1)如果设备开始内存不足,操作系统将开始终止暂停的应用程序一段时间没有被切换到,而不会发出警告。这就是为什么让你的应用记住它的状态最符合你的利益的原因,所以如果你的应用被终止,然后重新打开,用户并不会真正注意到,因为它仍然会回到他们离开的地方。
2) 您的应用使用“后台”API 之一。这些用于音频播放、VoIP 服务或定位服务。在这种情况下,您的应用程序可以继续在后台运行,但只能访问这些 API。此外,您的应用可以将某些长时间运行的任务指定为需要在应用暂停或终止之前完成的“后台任务”,例如将图片上传到 Flickr 或渲染视频等。
“后台任务”方法不会无限期地ping服务器,因为任务有时间限制,之后将被强制停止。需要这种功能的应用程序应该像以前一样实现推送通知。
那应该澄清这一点。总而言之,我认为这是在移动设备上进行多任务处理的一个非常优雅的解决方案。
iOS 4 应用程序可以运行或暂停。操作系统将尝试将尽可能多的请求应用程序保留在内存中,而所有其他应用程序都被挂起。
在后台运行的应用程序可以访问导航、音频和 VOIP 等功能(但不能访问即时消息)。所以看起来你可能不走运。
应用程序可以请求后台时间。阅读文档。我会说 iOS 是“受控多任务处理”。
您可以创建一个长时间运行的后台任务,我相信这些可以包括网络功能。只需在工作块上设置后台任务标志。
操作系统可以精确地限制您获得的时间......它会告诉您时间到了,让您有机会很好地清理。
iOS 4 在某种程度上具有“真正的”多任务处理。有两点需要考虑:
目前,这些标准之一是执行时间限制为 10 分钟(实时而不是 CPU 时间)。但是,我希望这会改变并看到更好的后台应用程序终止标准(我希望如此)。
除此之外,您可以在后台使用计时器(事件循环)。
iOS 4.2 甚至没有真正的多任务处理。因为应用程序将只被允许完成与状态相关的任务..在很短的时间间隔内,然后它将处于暂停状态..如果您将后台任务设置为很长的时间间隔,那么......它的行为会出乎意料当您尝试从任何地方运行应用程序时,不会调用任何方法..
您可能会对这篇概述“多任务处理”如何在 iPhone OS 4 和 Android 等系统中工作的博文感兴趣。
事实上你可以这样做,虽然苹果不允许这样做。你必须在你的mac中建立一个工具链并使用一些非官方的SDK......
您应该为您正在创建的功能集使用推送通知框架!