进入后台时Alamofire请求会被卡住?

时间:2016-10-23 19:16:53

标签: ios swift request alamofire

我正在使用Alamofire来调用Web服务,这需要很长时间才能加载。如果应用程序进入后台,当我返回应用程序时,我会遇到我的加载程序。我想这是因为调用永远不会向我的完成处理程序返回任何内容。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:6)

您可以使用后台提取来解决此问题。它可以在Swift 3中以下列方式完成:

    var backgroundTask: UIBackgroundTaskIdentifier? // global variable        

    backgroundTask = UIApplication.shared.beginBackgroundTask(withName: "backgroundTask") {
        // Cleanup code should be written here so that you won't see the loader

        UIApplication.shared.endBackgroundTask(self.backgroundTask!)
        self.backgroundTask = UIBackgroundTaskInvalid
    }

在此行之后调用您的alamofire服务。在完成处理程序中,使用以下行结束任务。

    UIApplication.shared.endBackgroundTask(self.backgroundTask!)
    self.backgroundTask = UIBackgroundTaskInvalid

请注意,该应用在进入无效状态之前还有一些后台时间(backgroundTimeRemaining属性)。你必须在那之前完成任务。在剩余的后台时间达到零之前不久调用处理程序。此外,对方法beginBackgroundTask(withName:){}的每次调用都必须通过匹配endBackgroundTask:方法调用来平衡。

要使上面给出的代码有效,您需要调整应用中的设置。转到"目标"并点击"功能"进行以下更改

Changes to made in "Target" section

之后,转到info.plist文件,然后将其打开为Source以添加以下代码。

enter image description here

我希望这会对你有所帮助。如果您需要更详细的信息,这些链接可能会有所帮助

答案 1 :(得分:0)

该问题可以通过添加以下内容来解决:

application.beginBackgroundTask { }

进入func applicationDidEnterBackground(_ application: UIApplication)

application.endBackgroundTask(.invalid)

进入func applicationWillEnterForeground(_ application: UIApplication)