NSURLSession 后台任务:handleEventsForBackgroundURLSession:completionHandler 啥时候调用?

Posted

技术标签:

【中文标题】NSURLSession 后台任务:handleEventsForBackgroundURLSession:completionHandler 啥时候调用?【英文标题】:NSURLSession background tasks: when to call the handleEventsForBackgroundURLSession: completionHandler?NSURLSession 后台任务:handleEventsForBackgroundURLSession:completionHandler 什么时候调用? 【发布时间】:2015-01-14 20:47:18 【问题描述】:

我正在使用 NSURLSession 上传多个视频文件。

application:handleEventsForBackgroundURLSession:completionHandler: 方法被多次调用,似乎是在每个任务完成之后。我存储了传递给此方法的 completionHandler,以便稍后调用它。

我的问题是:每次调用上述应用程序委托方法时我都会调用它吗?还是仅当我的后台会话为[tasks count] == 0 时才调用它?当我执行后者时,应用程序在后台崩溃并在控制台中显示此信息:

Application Specific Information:
<BKNewProcess: 0x134d48400; com.vimeo; pid: 2141; hostpid: -1> has active assertions beyond permitted time: 
(
    <BKProcessAssertion: 0x134d49500> id: 1679-3230372B-D4E5-44A1-A8DD-221CA8E6EECE name: com.apple.nsurlsessiond.handlesession com.vimeo.app.BackgroundSessionIdentifier process: <BKNewProcess: 0x134d48400; com.vimeo; pid: 2141; hostpid: -1> permittedBackgroundDuration: 30.000000 reason: backgroundDownload owner pid:1679 preventSuspend  preventThrottleDownUI  preventIdleSleep  preventSuspendOnSleep 
)

我已经阅读了许多有关后台会话及其复杂性的 *** 和博客文章,但我看到有关上述问题的相互矛盾的信息。

提前感谢您的帮助。

【问题讨论】:

后一个想法听起来不错,但您应该在那个计数器上处理并发,可能是使用 GCD 或通知... 【参考方案1】:

URLSessionDidFinishEventsForBackgroundURLSession 的文档说在那里调用它。我一直这样做只是因为他们说,我没有看到任何相关的问题。

【讨论】:

以上是关于NSURLSession 后台任务:handleEventsForBackgroundURLSession:completionHandler 啥时候调用?的主要内容,如果未能解决你的问题,请参考以下文章

NSURLCache 用于 NSURLSession 后台任务

NSURLSession 后台任务:handleEventsForBackgroundURLSession:completionHandler 啥时候调用?

当应用程序从后台删除或设备重启时使用 NSURLSession 恢复任务

NSURLSession 后台断点下载

NSURLSession 后台传输不起作用

iOS NSURLSession 使用自定义委托处理数据任务的完成