我的应用程序通过先下载然后播放来播放音频文件。我正在使用
URLSessionConfiguration.background
下载文件,它在前台运行良好。但是,当应用程序进入后台时,下载会停止,直到返回前台。此问题仅发生在设备上,而在模拟器的前台和后台都可以正常工作。
启用后台模式:后台处理和后台获取。
使用
UIApplication.shared.beginBackgroundTask
扩展了后台任务。
但是,我仍然得到相同的结果,在设备上的后台下载不起作用。
后台会话并不是真正用于在后台完成需要很快发生的工作。 它们设计用于进行低优先级下载,而不关心何时获得结果,并确保最终下载完成,可能会在数小时或数天后完成。 这些下载的优先级最低,如果在后台创建任务,它们也会自动被视为可自行决定的。
您可能只需在会话中设置
shouldUseExtendedBackgroundIdleMode = YES
即可解决此问题,但我不确定。
但实际上,如果您希望快速需要该内容(用于暂时播放音频),我认为您可能不应该使用后台会话,因为如果您的应用程序实际上被终止,可能没有理由继续下载由操作系统。 相反,使用正常的前台会话并依靠后台模式权利来确保在应用程序处于后台时允许继续提取。 不过我对此并不确定。
此外,如果您处于低数据模式,除非打开
allowsConstrainedNetworkAccess
,否则后台访问可能会受到限制。 另外,出于类似的原因,请确保 allowsExpensiveNetworkAccess
已打开。