使用applicationWillTerminate尽可能延迟关机

时间:2009-07-28 09:24:03

标签: iphone objective-c

我注意到,当按下主页按钮时,几个iPhone应用程序,特别是一些图形密集型游戏需要很长时间才能退出。

我的问题是,天气可以人为地重现这种情况,原因是,我正在尝试实现一种“手机保护器”,当读取某些加速度计数据时,它会开始发出巨大的噪音。我们的想法是让AVAudioPlayer尽可能长时间地播放声音(即直到iPhoneOS决定彻底杀死这个过程)。

我在我的app委托中试过这样的事情,只是为了看看它是如何反应的:

-(void)applicationWillTerminate:(UIApplication *)application{ 
    NSInteger i;
    while(true) {
        i++;
    }
}

但是,主屏幕立即出现并且声音停止播放(AVAudioPlayer实例位于视图控制器中),但应用程序进程仍在内存中,实际上阻止我启动新的实例应用程序,直到旧的手动杀死(这都在模拟器中)。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

  1. 您确实需要在真实设备上进行测试。

  2. 我觉得你有6秒的时间退出,之后就会被杀死。

  3. 顺便说一句,AVAudioPlayer,可能是一个好公民,并且不在路上。 它引起了一些奇怪的甚至是烦人的事情。在这种情况下,你需要更低级别的东西,比如远程io音频单元。我知道一个事实,如果你没有在applicationWillTerminate中停止它,那么它将很乐意继续在主屏幕上发声。

答案 1 :(得分:0)

事实证明,AVAudioPlayer实际上并不像一个好公民,但是当我完成播放循环声音时我正在使用它的回调,但由于某种原因,在applicationWillTerminate被调用后无效。使用numberOfLoops = -1并添加一个循环(i ++;不起作用,NSLog(@“qwerty”)对应用代表做了。

有趣的是,声音实际上仍在继续播放。我正在使用官方SDK,但使用越狱手机。

答案 2 :(得分:0)

不幸的是,我无法将我在工作计算机上使用的基于cookie的用户与我的OpenID相关联,因此我无法正确回复。

无论如何,我使用的是3.0,在模拟器和设备上都会发生同样的事情。我目前无法在非监狱破坏的手机上进行测试,因为Apple正在采取永久性的方式,然后一些人批准我们的许可证,即使我们已经有几个应用程序编码并准备发布......

我一发现就会通知你。