我可以使用循环来延迟应用程序进入后台吗?

时间:2011-03-08 13:55:52

标签: iphone objective-c cocoa-touch

我的iPhone应用程序播放音频,当用户点击主页按钮时需要轻轻淡出(因此将应用程序发送到后台)。我可以让我的音频单元淡出,但不幸的是,由于应用程序之前被发送到背景,声音以粗暴的噼啪声结束。

这意味着,我需要延迟前往后台。我可以检查环路中的AU振幅,并在振幅达到零时退出环路。为了双重安全,我设置了警报,以便延迟不会超过1/10秒。具体来说,在我的AppDelegate的{​​{1}}方法中,我说:

applicationDidEnterBackground

这可以按预期工作,但会停止应用程序。这被认为是不好的风格,还是可以的?


跟进:感谢您的投入。我坚持拖延而不是继续在后台玩,但现在我这样做:

time_t s1 = clock() + (time_t)(0.1 * CLOCKS_PER_SEC);
while( ([sinus current_amplitude] > 0.0 ) && ( s1 > clock()) );

更优雅。

2 个答案:

答案 0 :(得分:4)

以这种方式阻止UI运行循环不是一个好的应用程序设计。如果你阻止运行循环太久,操作系统甚至可能会杀死你的应用程序。

一种可能性是注册您的应用程序以进行多任务背景音频播放,并在背景中,在停止音频和释放音频会话之前,播放几秒钟的音频逐渐变为零。

答案 1 :(得分:1)

这不是播放音乐的应用的默认行为。您应该让您的应用正常终止,但可以根据需要淡出音乐。它也可以在后台播放几秒钟。