gpt4 book ai didi

iOS:在应用程序处于后台时执行上传任务

转载 作者:技术小花猫 更新时间:2023-10-29 10:23:28 29 4
gpt4 key购买 nike

当 iOS 应用程序处于后台时,真的没有办法运行上传任务吗?这是荒唐的。一直在查看各种东西,例如 NSURLSessionUploadTaskdispatch_after 甚至 NSTimer,但应用程序在放置后只有短短的 10 秒才有效在后台。

其他具有上传功能的应用如何运作?比如,将图片上传到 Facebook 并将应用程序置于后台,这会取消上传吗?

为什么 iOS 不能像 Android 和 Windows Phone 那样有后台服务或代理?

这是我的应用程序的一个关键功能,在其他平台上运行完美。

感谢任何帮助:(

最佳答案

您可以使用“后台 session ”在后台继续上传。使用 background(withIdentifier:) 创建后台 URLSessionConfiguration 的基本过程在 Downloading Files in the Background 中概述.该文档侧重于下载,但同样的基本过程也适用于上传任务。

注意:


顺便说一句,如果你不想使用后台NSURLSession,但你想在应用程序离开后台后继续运行一个有限长度的任务超过几秒,你可以使用 UIApplication 方法 beginBackgroundTask 请求更多时间。这会给你一点时间(以前是 3 分钟,在 iOS 13 及更高版本中只有 30 秒)完成你正在处理的任何任务,即使用户离开应用程序也是如此。

参见 Extending Your App's Background Execution Time .他们的代码片段有点过时了,但现代版本可能如下所示:

func initiateBackgroundRequest(with data: Data) {
var backgroundTaskID: UIBackgroundTaskIdentifier = .invalid

// Request the task assertion and save the ID.
backgroundTaskID = UIApplication.shared.beginBackgroundTask(withName: "Finish Network Tasks") {
// End the task if time expires.
if backgroundTaskID != .invalid {
UIApplication.shared.endBackgroundTask(backgroundTaskID)
backgroundTaskID = .invalid
}
}

// Send the data asynchronously.
performNetworkRequest(with: data) { result in
// End the task assertion.
if backgroundTaskID != .invalid {
UIApplication.shared.endBackgroundTask(backgroundTaskID)
backgroundTaskID = .invalid
}
}
}

请不要迷失在此处的细节中。关注基本模式:

  • 开始后台任务;
  • 提供一个超时子句,在您碰巧用完时间时清理后台任务;
  • 启动您需要继续的任何操作,即使用户离开应用程序也是如此;和
  • 在网络请求的完成处理器中,结束后台任务。

关于iOS:在应用程序处于后台时执行上传任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23829546/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com