当ios应用程序使用URLSession进入后台状态时,是否有任何可能的方法来完成Web服务任务? 我不是试图将一个巨大的文件上传到服务器,而是我试图上传一个4位数的密钥。 我已经尝试了以下方法进行后台任务。
var bgTask = UIApplication.shared.beginBackgroundTask(expirationHandler: {})
出于测试目的,我在循环中调用webservice并记录。当我进入后台模式时,网络服务电话就会卡住。
答案 0 :(得分:1)
大量上传/下载文件
在iOS 7中推出。
这实际上取决于任务花费多少时间。如果这是一个大的下载或上传任务(例如下载视频),您应该使用NSURLSession和后台配置来执行任务。 iOS系统将处理上传/下载任务。下载完成后,下载的文件将保存到临时文件中(因此您可能需要稍后将其复制到其他位置)。 Downloading in background and waking app when finished
普通网络服务(我认为这就是你想要的)
在iOS 6中推出
对于有限长度操作,您可以使用beginBackgroundTaskWithExpirationHandler。
var task = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler(){}
//do your job (call the service)
//on completion you shouldcall the bellow two lines
UIApplication.sharedApplication().endBackgroundTask(task)
task = UIBackgroundTaskInvalid
无需使用后台配置配置NSURLSession。
答案 1 :(得分:0)
class func generalPost(url: String, postCompleted : (response: String) -> ()) {
let request = NSMutableURLRequest(URL: NSURL(string: url)!)
let session = NSURLSession.sharedSession()
request.HTTPMethod = "POST"
let dataString = ""
request.HTTPBody = dataString.dataUsingEncoding(NSUTF8StringEncoding)
let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
let strData = NSString(data: data!, encoding: NSUTF8StringEncoding)
postCompleted(response: strData)
})
task.resume()
}
你可以使用
generalPost(url: "http://stackoverflow.com/") { (response) in
dispatch_async(dispatch_get_main_queue(), { () -> Void in
UIAlertView(title: "Message", message: response, delegate: nil, cancelButtonTitle: "Ok").show()
})
}