在iOS12中,苹果开始取消不是URLSessionDownloadTask
的网络请求,并设置了后台会话。
但是根据苹果网站:
您不必在后台进行所有后台网络活动 会话...声明适当的应用 后台模式可以使用默认的URL会话和数据任务,就像 如果它们在前台
我正在使用自定义播放器播放流媒体文件,应用程序启用了Audio
和Background Fetch
模式。应用进入后台状态后,URLSessionDataTask
会在前台初始化。
我知道AVPlayer可以在后台流式传输,但是不能使用AVPlayer。
我知道我可以使用URLSessionDownloadTask
设置会话,该会话将在单独的进程中下载数据并将路径返回到文件,由于流需求,这不是一个选择。
我知道我可以使用UIApplication.shared.beginBackgroundTask
来请求额外的后台执行时间,但这是不可接受的解决方案,因为如果backgroundTimeRemaining
在流完成的应用程序被终止之前过期了。
当应用程序处于后台模式时,是否可以继续接收数据?
答案 0 :(得分:0)
确保您的后台会话已启用shouldUseExtendedBackgroundIdleMode
。如果您不这样做,则当应用程序从前台执行过渡到后台执行时,会话将停止数据任务。或者,正如该Downloading Files in the Background文档所说,您也可以使用default
会话配置,而这种配置不会表现出这种行为。
FWIW,当使用AVPlayer
时,除了启用背景音频功能...
...您可能还必须告知共享音频会话实例它处于活动状态:
try AVAudioSession.sharedInstance().setCategory(.playback)
try AVAudioSession.sharedInstance().setActive(true)
我无法说出您的“自定义播放器”需要什么,但是对我来说,我必须同时做这两项操作,以使应用程序在后台运行并通过AVPlayer
播放音频。