我有一个使用多个 AVAudioPlayer 对象来播放音乐的应用程序。在 iOS6 上,此应用程序在被来电中断时崩溃。在 iOS 4.3、5.0 或 5.1 上不会出现此问题。当应用程序崩溃时,会看到以下堆栈跟踪。
(lldb) 线程回溯 * 线程 #1: tid = 0x2403, 0x3b905e64 libsystem_c.dylib pthread_mutex_lock + 388, stop reason = instruction step over
frame #0: 0x3b905e64 libsystem_c.dylib
pthread_mutex_lock + 388 帧 #1: 0x3299bd18 AVFoundation AVAudioPlayerCpp::sessionPropertyListener(unsigned long, unsigned long, void const*) + 124
frame #2: 0x33200b32 AudioToolbox
AudioSessionPropertyListeners::CallPropertyListenersImp(unsigned long, unsigned long, void const*) + 170 帧 #3: 0x33Tool2008cc Audiobox AudioSessionPropertyListeners::CallPropertyListeners(unsigned long, unsigned long, void const*) + 244
frame #4: 0x332b4afc AudioToolbox
ASCallbackReceiver_AudioSessionInterruptionListenerMessage + 184 frame #5: 0x33389dde AudioToolbox _XAudioSessionInterruptionListenerMessage + 70
frame #6: 0x3320058a AudioToolbox
mshMIGPerform + 382 frame #7: 0x337a33e6 CoreFoundation __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 34
frame #8: 0x337a338a CoreFoundation
__CFRunLoopDoSource1 + 138 frame #9: 0x337a220e CoreFoundation __CFRunLoopRun + 1382
frame #10: 0x3371523c CoreFoundation
CFRunLoopRunSpecific + 356 frame #11: 0x337150c8 CoreFoundation CFRunLoopRunInMode + 104
frame #12: 0x372f433a GraphicsServices
GSEventRunModal + 74 frame #13: 0x356312b8 UIKit`UIApplicationMain + 1120
我添加了 applicationWillResignActive 并且在发生崩溃时不会调用它。我还添加了我的应用程序委托作为 AVAudioPlayer 对象的委托,并实现了 audioPlayerBeginInterruption 方法。发生崩溃时也不会调用此方法。如果我只使用 1 或 2 个 AVAudioPlayer 对象,崩溃就会消失。崩溃发生在另外 3 个 AVAudioPlayer 对象上,尽管其中只有 2 个在给定时间播放,其余的已停止。
有没有人见过这种问题或有任何提示?
谢谢。