我正在使用 Alamofire 调用 Web 服务,该服务需要相当长的时间才能加载。如果应用程序进入后台,当我返回应用程序时,我会被加载程序卡住。我想这是因为调用永远不会向我的完成处理程序返回任何内容。我该如何解决这个问题?
您可以使用后台抓取来解决这个问题。在 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:
method.
要使上面给出的代码正常工作,您需要调整应用程序中的设置。转到“目标”并单击“功能”进行以下更改
之后,转到 info.plist 文件,并将其作为源打开以添加以下代码。
我希望这可以帮助你。如果您需要更详细的信息,这些链接可能会有所帮助
- https://developer.apple.com/reference/uikit/uiapplication/1623031-beginbackgroundtaskwithexpiratio https://developer.apple.com/reference/uikit/uiapplication/1623031-beginbackgroundtaskwithexpiratio
- https://developer.apple.com/reference/uikit/uiapplication/1622970-endbackgroundtask https://developer.apple.com/reference/uikit/uiapplication/1622970-endbackgroundtask
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)