我的应用使用 AVAudioPlayer 播放背景音频并从 iOS 接收远程控制事件。播放音频时一切正常,但如果音频暂停并且我的应用程序移到后台,就会发生一些奇怪的事情。如果我在 10 分钟后使用蓝牙设备恢复/取消暂停音频,iOS 会终止我的应用程序并显示以下消息:
<MyApp>[633] has active assertions beyond permitted time:
{(
<SBProcessAssertion: 0x25f520> identifier: com.apple.mediaremote.sendremotecommand process: <MyApp>[633] permittedBackgroundDuration: 600.000000 reason: finishTask owner pid:58
)}
这有两件非常奇怪的事情。
iOS 不会在 10 分钟后关闭我的应用程序。只有在通过蓝牙接收到远程控制命令后才会这样做。
如果我使用 iOS 的遥控器按钮或耳机上的遥控器,我的应用程序将毫无问题地继续播放音频。
我无法弄清楚为什么蓝牙远程控制消息会导致 iOS 终止我的应用程序。我已经能够确认 Pandora 应用似乎没有类似的问题。
有人知道吗?
更新:进一步的测试揭示了更清晰的错误描述。在音频暂停 10 分钟或更长时间并且应用程序遇到内存不足警告后尝试恢复背景音频时,似乎会发生这种应用程序的强制 iOS 崩溃。
重现错误需要执行以下步骤:
- 要么暂停应用程序的音频,然后将其发送到后台(点击主页按钮或切换到另一个应用程序),要么在应用程序处于后台时暂停应用程序的音频
- 导致应用程序遇到内存不足警告(模拟或真实)
- 10 分钟后,尝试使用从蓝牙设备或扬声器底座等设备触发的远程控制事件播放音频。
注意:iOS 似乎仅在从外部设备(如蓝牙设备、扬声器底座或汽车适配器)启动最终远程控制事件时强制使应用程序崩溃。使用 iOS 内置的“遥控器”界面或耳机上的遥控器似乎不会导致崩溃。
就像评论中提到的乔治一样,我已经能够用我自己的应用程序、潘多拉和至少一个其他音频播放应用程序来重现这一点。我已经向 Apple 提交了错误报告。