2010-06-09 40 views
10

自从第一次测试发布以来,我一直在试图找出“真正的”多任务是否可能 - 也就是说,您能否将程序放在后台并且无限期地挂在网络连接上?iOS 4是否向第三方开发者提供“Real Multitasking”?

例如,我正在考虑IM或IRC应用程序。我已经在iOS 4上自己编译了一个应用程序,并且没有改变任何东西,它似乎保持在后台运行,但我知道它只是暂停在内存中。

文档说最好你可以做的是请求长达10分钟,但在开发人员的演示文稿中,他们展示了Skype坐在后台,然后通知用户通话正在进行。有谁知道如何确定这一切工作?

+2

我有0 iOS的经验,所以这可能没有帮助。但是,为什么不在后台运行时做一些事情来查看它是否在运行(例如,每秒更新一次计数器)? – Cam 2010-06-09 05:22:37

+0

好主意!我现在要尝试... – 2010-06-09 05:50:28

+0

我只是设置了一个计时器来每秒开启并ping我的Web服务器。果然,当应用程序进入后台时,定时器停止了触发,即使它返回时它也会立即恢复到它暂停时的​​状态。 – 2010-06-09 06:51:41

回答

10

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

您可以在后台接收警报通知(如时间已过)。您处于后台运行状态的时间量受OS严重限制。

Android的背景模型是完整的,在许多方面更好。

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

+9

完全可操作的背景模式对于开发人员来说更容易处理,但是对电池寿命的残酷。这是苹果公司在此做出的设计权衡。不要成为苹果的apologist,但如果你像用户而不是开发人员那样思考,你可以理解设计选择。 – 2010-06-09 12:06:41

+2

我想要它作为一个用户。我想要适当的IRC和聊天应用程序,我希望开发人员可以自由地做他们需要做的事情来创建我想要的应用程序。也许我是一个令人讨厌的用户,并不典型,但我仍然像用户一样思考。 – 2010-06-09 15:36:53

+3

@pkulak,相反你想要的电池寿命只需要几个小时就可以满足你的需求。真正的非开发者最终用户,需要一台能够持续一整天,做他们需要的电话,他们不在乎它是如何做到的。如果它看起来是做你想做的事,但却没有做到你认为应该做的事,那有什么不同。 – 2010-06-16 17:29:27

1

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

的应用程序,在后台运行可以访问这些功能的导航,音响,和VOIP(但不即时通讯)。所以看起来你可能会倒霉。

- PC World Multitasking on Apples iPhone 4

0

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

+1

请注意,Android没有相同的限制服务为iOS。与iOS不同的是,后台可以连续运行网络连接服务。服务可以由应用程序(或其自身)启动和停止,服务可以启动意图(比iOS更灵活)。上述通知在Android中被命名为“广播”,并且不需要运行服务。 – 2010-06-09 06:06:30

8

苹果的iOS 4开发人员文档很清楚地概述了这一点。

当你的应用程序关闭或切换离开时,它几乎立即“挂起”,这意味着操作系统冻结了应用程序的状态。当用户切换回您的应用程序时,您的代码将保持运行状态。你不需要需要添加任何代码到你的应用程序来做到这一点,只是编译它对操作系统4.

以上是在大多数情况下是正确的。 “暂停”模式可能不适用的原因有两个:

1)如果设备在内存中开始运行低电平,操作系统将开始终止暂时没有切换的暂停应用程序,而不发出警告。这就是为什么你的应用程序要记住它的状态对你最有利,所以如果你的应用程序被终止,然后重新打开,用户并没有真正注意,因为它仍然返回到他们离开的地方。

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

“后台任务”方法不会无限期地检测服务器,因为任务有时间限制,之后它将被强制中止。与以往一样,需要这种功能的应用程序需要实施推送通知。

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

1

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

1

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

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

操作系统会限制正是你多少时间得到,虽然...它会告诉你,当你的时间到了给你一个机会来清理很好。

+0

尽管在移动到背景之前,尽可能多地进行清理是非常重要的。如果手机在内存不足的情况下运行并且不得不杀死您的应用程序,您根本没有收到任何警告,只会被杀死。 – kubi 2010-06-26 16:10:30

1

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

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

目前这些标准之一是执行时间被限制为10分钟(实时不cpu时间)。不过,我希望这会改变,并看到更好的背景应用程序终止标准(我希望)。

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

1

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

0

对于您要创建的功能集,您应该使用推送通知框架!

相关问题