如何解决上载的情况下,最好在`handleEventsForBackgroundURLSession`中调用`completionHandler`的最佳位置? 1我应该从哪里调用完成处理程序,以确保所有的后处理都在上传后完成在这种情况下,我想查询数据库,更新并发送消息我正在构建一个聊天应用程序?在我执行处理并从urlSessionDidFinishEvents方法外部调用它时,可以延迟完成处理程序调用吗? 2调用完成处理程序后,大约能获得多少时间?注意:我在发布之前做了很多谷歌搜
我正在使用URLSessionConfiguration.background
上载和下载内容,而我的应用程序不是前台。我用来创建后台会话的代码如下:
private var session: URLSession!
private override init() {
super.init()
let config = URLSessionConfiguration.background(withIdentifier: Constants.backgroundSessionIdentifer)
config.sessionSendsLaunchEvents = true
session = URLSession(configuration: config,delegate: self,delegateQueue: nil)
}
在应用程序委托中,我收到一个完成处理程序并将其存储为Singleton的UploadDownloadService属性。
func application(_ application: UIApplication,handleEventsForBackgroundURLSession identifier: String,completionHandler: @escaping () -> Void) {
Logger.debug(#function)
UploadDownloadService.shared.backgroundCompletionHandler = completionHandler
}
我正在urlSessionDidFinishEvents
中以苹果demonstrated的身份执行处理程序。我的代码如下:
func urlSessionDidFinishEvents(forBackgroundURLSession session: URLSession) {
Logger.debug(#function)
delegate?.urlSessionDidFinishEventsCalled()
dispatchQueue.main.async {
[weak self] in
guard let backgroundCompletionHandler = self?.backgroundCompletionHandler else {
return
}
Logger.debug("Executing background completion handler.")
backgroundCompletionHandler()
self?.backgroundCompletionHandler = nil
self?.delegate?.didCallBackgroundCompletionHandler()
}
}
现在在urlSession(_ session:,downloadTask:,didFinishDownloadingTo location:)
之前调用了我发现的urlSessionDidFinishEvents
,因此在我在urlSessionDidFinishEvents
内调用完成处理程序之前,我确定已下载的文件已保存到一个永久位置。
但是我对上传案例感到困惑。我找不到在urlSessionDidFinishEvents
方法之前调用的任何委托方法。应用唤醒时,我找到的唯一用于上载的委托方法是urlSession(_ session:,task:,didCompleteWithError:)
。在urlSessionDidFinishEvents
之后调用。
现在在这种情况下,我要记住两个问题。
1。我应该从哪里调用完成处理程序,以确保所有的后处理都在上传后完成(在这种情况下,我想查询数据库,更新并发送消息。我正在构建一个聊天应用程序)?在我执行处理并从urlSessionDidFinishEvents
方法外部调用它时,可以延迟完成处理程序调用吗?
2。调用完成处理程序后,大约能获得多少时间?
注意:我在发布之前做了很多谷歌搜索,发现了一个相关的问题here。但是,该帖子的唯一答案(截至目前)仍无法回答我的问题。因此,我决定在这里详细说明这个问题(描述我的情况)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。