【问题标题】:Chaining Background Tasks Alamofire链接后台任务 Alamofire
【发布时间】:2017-09-07 17:46:20
【问题描述】:

我有一个关于 Alamofire 及其在为后台任务配置的 SessionManager 中的行为的问题。我正在使用它在后台上传视频。

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

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

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

所以我的问题是关于覆盖 Session Manager 委托闭包。我可以覆盖sessionDidFinishEventsForBackgroundURLSessiontaskDidComplete,当我完全完成后台操作时,我需要调用系统完成处理程序,我将其作为属性存储在 SessionManager 上......所以我应该何时/在哪里触发 DELETE 请求然后我应该何时/在哪里触发 PATCH 请求?

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

我还想知道 Alamofire 响应处理程序。如果应用程序一直在前台?我会简单地使用响应处理程序将 alamofire 请求链接在一起吗?但是如果应用程序终止并在后台运行,这些处理程序还会存在吗?

这里的任何见解将不胜感激。我意识到这里发生了很多事情,Apple eve rate 限制了后台任务,我只是想知道这是否可行,如果可以,该怎么做?

【问题讨论】:

  • 用段落将其分成几部分使其更具可读性。

标签: ios networking alamofire background-process


【解决方案1】:

我应该创建 3 个不同的后台会话配置吗 标识符,以便我可以识别它们并确保将它们正确链接 订购?

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

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

  2. 承诺工具包: 如果异步 NSOperations 太复杂,你总是可以使用 Promise 工具包。只有在特定请求完成后,Promise 工具包才会负责执行请求,如果顶部的一个失败,整个依赖链就会短路。

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

如果应用程序终止并在后台运行,这些 处理程序还在吗?

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

【讨论】:

    猜你喜欢
    • 2016-12-19
    • 2011-09-29
    • 2011-09-15
    • 2013-02-04
    • 2017-10-01
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多