2

我正在为我的应用程序播放背景音频。但是一些用户警告我一个奇怪的错误。在后台播放 1 小时或更长时间后,应用程序被 iOS 杀死,您需要再次启动它。

大多数情况下,当应用程序必须经常创建后台任务并使用它直到下载足够的数据以再次开始播放时,它会发生在互联网连接不良的情况下。

我知道后台任务的时间限制,这不是问题。这是来自用户设备的崩溃日志的一部分:

在此处输入图像描述 最重要的几行:

Exception Type: EXC_RESOURCE
Exception Subtype: CPU_FATAL
Exception Message: (Limit 80%) Observed 0% over 60 sec
Triggered by Thread: 0

最奇怪的是第三行。如果 0% 低于 80% 的限制,为什么它是一个例外?

通过符号化 Thread 0(它是主线程)的堆栈跟踪,我发现它发生在 method 上- [NSFileManager fileExistsAtPath:]。以前它发生在方法上+ [UIImage imageWithContentsOfFile:]。那么什么可以冻结对 iOS 后台文件系统的访问呢?

还:

  • 当应用程序尝试在锁定屏幕上设置图像时会发生这种情况。
  • 图像存储在 Cache 文件夹中。
4

1 回答 1

0

来自苹果文档:

您可以使用任何系统音频框架来处理背景音频内容,并且使用这些框架的过程保持不变。(对于通过 AirPlay 播放视频,您可以使用 Media Player 或 AV Foundation 框架来展示您的视频。)因为您的应用在播放媒体文件时不会暂停,所以当您的应用在后台时,回调正常运行。但是,在您的回调中,您应该只做为回放提供数据所必需的工作。例如,流式音频应用程序需要从其服务器下载音乐流数据并将当前音频样本推送出去以进行播放。应用程序不应执行任何与播放无关的无关任务。

因此,如果您执行诸如下载图像和保存图像之类的操作,则违反了此规则。

于 2015-11-26T07:18:09.500 回答