链接背景任务Alamofire

时间:2017-04-12 05:44:04

标签: ios networking alamofire background-process

我对Alamofire及其为后台任务配置的SessionManager的行为提出了疑问。我用它来在后台上传视频。

第一步:上传视频
但是,当上传完成时,此部分是标准的:

第二步:完成上传:
我需要向服务器发送DELETE请求,让它知道视频上传已完成。如果成功,响应将包含新上传视频的位置标题。

第三步添加视频元数据: 有了这个位置,我需要PATCH请求视频元数据:标题和描述。

所以我的问题是重写会话管理器委托闭包。我可以覆盖sessionDidFinishEventsForBackgroundURLSessiontaskDidComplete,当我完全完成后台后,我需要调用系统completionHandler,我将其存储为SessionManager中的属性...所以当我/哪里应该开火关闭DELETE请求然后何时/何地应该关闭PATCH请求?

我应该创建3个不同的后台会话配置标识符,以便我可以识别它们并确保按正确顺序链接它们吗?因为显然我不能在关闭时说:第一次你被叫这个请求火了,但第二次火了这一个?哪个关闭2是正确的完成整个过程并调用系统完成处理程序?我不确定这是否正确,因为我将与Alamofire上传响应处理程序不同步。

我也想知道Alamofire的响应处理程序。如果应用程序一直在前台?我只想使用响应处理程序将alamofire请求链接在一起?但如果应用程序终止并在后台运行,那么这些处理程序仍然存在吗?

这里的任何见解将不胜感激。我意识到这里有很多事情,Apple前夕的速度限制了后台任务,我只是想知道这是否可能,如果可以的话怎么去呢?

1 个答案:

答案 0 :(得分:0)

  

我应该创建3种不同的后台会话配置   标识符,以便我可以识别它们并确保我将它们链接在一起   购买?

我认为您不需要多个后台会话来确定调用完成块的请求以及链接下一个请求。你可以用

来实现它
  1. 异步NSOperation: 您可以使用异步NSOperations来链接多个请求。在操作之间添加依赖关系,让iOS处理调度和处理依赖关系。请注意:我提到了异步 NSOperation。 NSOperations本质上是同步

  2. 承诺套件: 如果Asynchronous NSOperations过于复杂,您可以随时使用Promise工具包。只有在特定请求完成后,Promise工具包才会执行请求,如果顶层的依赖链失败,整个依赖链将会短路。

  3. 只需在上传任务的完成块中创建新数据任务即可上传视频。而不是使用委托模式的任务使用完成块。这样你就不必确定调用委托的请求,因为每个任务都有自己的完成块,你可以在编写代码时轻松地将它们链接起来。

  4.   

    如果应用程序终止并在后台运行,则会显示这些内容   处理程序还在吗?

    虽然不是100%肯定,但据我所知,当您安排后台任务(后台会话)时,即使应用程序被杀,任务仍将继续执行。毕竟,这就是为什么我们使用后台会话。所以我相信即使你杀了应用程序也会执行完成处理程序。