sia*_*shk 2 networking cocoa-touch ios nsurlsession
我一直在使用NSURLSession后台上传到 AWS S3。像这样的东西:
NSURLSessionConfiguration* configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@“some.identifier"];
NSURLSession* session = [NSURLSession sessionWithConfiguration:configuration delegate:someDelegate delegateQueue:[NSOperationQueue mainQueue]];
NSURLSessionUploadTask* task = [session uploadTaskWithRequest:request fromFile:[NSURL fileURLWithPath:httpBody]];
[task resume];
Run Code Online (Sandbox Code Playgroud)
在 中someDelegate,我已实施didSendBodyData,didCompleteWithError和handleEventsForBackgroundURLSession.
我有三个问题:
handleEventsForBackgroundURLSession当在应用程序被关闭完成转移叫什么?httpBodyin handleEventsForBackgroundURLSession?这是传输完成后不需要的临时文件。当应用程序委托handleEventsForBackgroundURLSession被调用时,您应该:
NSURLSession;URLSession:task:didCompleteWithError:,您可以删除这些临时文件;和URLSessionDidFinishEventsForBackgroundURLSession:,您可以调用保存的完成处理程序。一些额外的注意事项:
应用程序终止时会发生什么似乎有些混乱。
如果应用程序在其正常生命周期过程中终止,URLSession守护进程将保持后台请求继续进行,完成您的上传,然后在完成后唤醒您的应用程序。
但是手动强制退出应用程序(例如,双击主页按钮,在应用程序上向上滑动以强制退出)是完全不同的事情(实际上,用户在说“停止此应用程序及其相关的所有内容”) . 这将停止后台会话。所以,是的,后台会话将在应用程序终止后继续,但是,不,如果用户强制退出应用程序,则不会。
您谈论设置断点并在 Xcode 中观察这一点。你应该知道,被附加到 Xcode 的过程会干扰正常的应用程序生命周期(它让它在后台运行,防止它被挂起,或者在正常的事件过程中,终止)。
但是在测试后台会话相关代码时,handleEventsForBackgroundURLSession在您的应用程序终止时测试工作流程至关重要,因此,为此,我建议在测试后台会话的这一维度时不要使用 Xcode 调试器。
我使用新的 OSLog 统一日志系统,因为 macOS 控制台可以查看应用程序记录的内容,而根本没有运行 Xcode。然后我可以编写代码来开始一些下载或上传,终止应用程序,然后观察我插入的日志语句,以便通过 macOS 控制台观察应用程序在后台重新启动。有关如何从 macOS 控制台观看 iOS 日志的教程,请参阅统一日志记录和活动跟踪视频。
| 归档时间: |
|
| 查看次数: |
461 次 |
| 最近记录: |