将应用程序发送到后台模式后,如何继续接收数据?

时间:2019-03-28 15:51:41

标签: ios

在iOS12中,苹果开始取消不是URLSessionDownloadTask的网络请求,并设置了后台会话。

但是根据苹果网站:

  

您不必在后台进行所有后台网络活动   会话...声明适当的应用   后台模式可以使用默认的URL会话和数据任务,就像   如果它们在前台

我正在使用自定义播放器播放流媒体文件,应用程序启用了AudioBackground Fetch模式。应用进入后台状态后,URLSessionDataTask会在前台初始化。

我知道AVPlayer可以在后台流式传输,但是不能使用AVPlayer。

我知道我可以使用URLSessionDownloadTask设置会话,该会话将在单独的进程中下载数据并将路径返回到文件,由于流需求,这不是一个选择。

我知道我可以使用UIApplication.shared.beginBackgroundTask来请求额外的后台执行时间,但这是不可接受的解决方案,因为如果backgroundTimeRemaining在流完成的应用程序被终止之前过期了。

当应用程序处于后台模式时,是否可以继续接收数据?

1 个答案:

答案 0 :(得分:0)

确保您的后台会话已启用shouldUseExtendedBackgroundIdleMode。如果您不这样做,则当应用程序从前台执行过渡到后台执行时,会话将停止数据任务。或者,正如该Downloading Files in the Background文档所说,您也可以使用default会话配置,而这种配置不会表现出这种行为。


FWIW,当使用AVPlayer时,除了启用背景音频功能...

enter image description here

...您可能还必须告知共享音频会话实例它处于活动状态:

try AVAudioSession.sharedInstance().setCategory(.playback)
try AVAudioSession.sharedInstance().setActive(true)

我无法说出您的“自定义播放器”需要什么,但是对我来说,我必须同时做这两项操作,以使应用程序在后台运行并通过AVPlayer播放音频。