多任务处理后 AVAudioPlayer 继续播放
Posted
技术标签:
【中文标题】多任务处理后 AVAudioPlayer 继续播放【英文标题】:AVAudioPlayer Keeps Playing After Multitasking 【发布时间】:2011-06-19 15:21:33 【问题描述】:我有一个应用程序可以在游戏期间在后台播放音乐,它支持多任务处理。当我按下主页按钮时,会在 applicationWillResignActive 上调用一个操作。这会拉起暂停屏幕并暂停游戏。但是,当我在游戏中实现音乐时,事情就出了问题。我使用 AVAudioPlayer 播放我的背景音乐。当调用 applicationWillResignActive 时,在显示暂停屏幕的同一操作中,音乐被告知暂停。但是当您通过多任务返回应用程序时,暂停屏幕仍会正常显示,但音乐也仍在播放。我在很多地方尝试过停止音乐,但它拒绝停止。即使切换视图后,音乐仍然播放。它完全没有反应。
这非常令人沮丧。请帮忙!
【问题讨论】:
【参考方案1】:我今天花了几个小时来解决完全相同的问题。 我终于有一个解决方法。 #stop 方法释放硬件,但不会忘记当前播放位置。 因此,您可以再次调用#play 并根据需要继续播放。
我之前的代码是:
[player pause];
...
if ([player isPaused]) [player play];
这当然没用,正如您所经历的那样,在应用回到前台后,播放愉快地恢复了。
现在我有这样的东西:
self.playbackSuspended = YES;
[player stop];
...
if (self.playbackSuspended) [player play];
一个 hack,但它有效。唯一的缺点是隐式调用#prepareToPlay 以重新获得播放硬件、重新缓冲等的所有权,因此播放可能会有延迟 - 到目前为止我还没有注意到。
另请注意,根据您的实施,在上述 hack 之后处理中断(例如电话呼叫)可能会中断。电话中断行为正常,因此通过像上面这样的黑客攻击,任何共享代码都可能处于中断处理的混乱状态。
【讨论】:
以上是关于多任务处理后 AVAudioPlayer 继续播放的主要内容,如果未能解决你的问题,请参考以下文章