在iOS 5上locking屏幕时,NSTimer事件不会发生

我已经看到了这几次,但我还没有真正看到一个明确的答案…

由于iOS 5我的应用程序似乎遇到了问题,如果用户locking屏幕,我的NSTimer在locking屏幕约20秒后停止发射。 这使得我的应用程序,如果用户locking屏幕,每次定时器触发无声点播放声音。

这只是因为我更新我的设备到iOS 5。

我的问题是1.是否有任何解决方法,使相同的function在更新的设备上工作或2.如果您的应用程序没有在locking状态下运行,build议您不要收到错误评论。

当用户locking屏幕时, 应用程序进入“非活动”状态 。 这与将您的应用程序置于背景中相似,但不相同。 苹果公司的文档指出:“该应用程序正在运行,但目前没有收到事件(但可能正在执行其他代码)”

然而,在进入非活动状态之后,iPhone完全进入hibernate状态,除非正在运行以保持活动状态,显然,等待NSTimer启动并不能满足这个标准。 在前面的问题中有讨论。 一种解决办法就是在你的计时器触发时播放你的声音,并在此期间连续播放一段无声的声音,以防止iPhone进入hibernate状态。 一个黑客,但至less在这种情况下,不是一个完全丑陋的黑客,因为使用声音,以保持iPhone清醒,以发挥声音有一种对称性。

以前链接的内容
从苹果关于实施长期后台任务的指导方针来看 :

播放背景audio
一个连续播放audio的应用程序(即使应用程序在后台运行时)也可以通过在其Info.plist文件中包含UIBackgroundModes键(使用audio值)注册为背景audio应用程序。 包含此密钥的应用必须在后台播放可听内容给用户。

你在你的应用程序中实现这个吗? 如果没有,那是你的问题。

关于#2:你可以更新应用程序的描述,以表明它不能在屏幕locking的情况下工作,但更好的办法是让它按用户期望的那样工作。 🙂

在iOS5中,苹果已经推出了更多的后台任务模式,包括“audio”,“位置”,“voip”,“报刊内容”,“外部附件”和“蓝牙中央”。 我认为你可以确定你可以在你的应用程序中使用哪种模式。 链接是http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html#//apple_ref/doc/uid/TP40007072-CH4-SW24