当应用程序移至后台时如何使 URLSession 工作
How to make URLSession to work when app is moved to background
单击按钮时,我必须执行多个 API 调用以获取数据并将该数据写入文件。我正在使用操作队列和 URLSession
datatask
来实现它。在处理此 API 调用时,如果通过单击主页按钮或通过 phone 调用将应用程序置于后台,则 API 调用不会处理。
我尝试了操作队列以及 Dispatch_async()
函数,但是在调用 API 调用后将应用置于后台时没有任何效果。
API 请求甚至应该在应用程序置于后台时工作。如何实现?
为了让您的应用程序继续在后台处理信息,您需要将配置从default
更新为:
let configuration = URLSessionConfiguration.background(withIdentifier:
"com.yourapp.bundleidentifier")
您可以在这个关于 URLSession
的非常好的教程中获得更多详细信息。
如果您正在使用 datatask,那么您可以实现 backgroundTask,这在 https://medium.com/@abhimuralidharan/finite-length-tasks-in-background-ios-swift-60f2db4fa01b
中有很好的解释
如果您正在使用 DownloadTask 或 UploadTask ,您可以使用配置
URLSessionConfiguration.background(withIdentifier:
"com.yourapp.bundleidentifier")
试试这个 UIApplication.shared.beginBackgroundTask(expirationHandler: { }) 及其相关 API,希望它对你有用。
在您的 AppDelegate
class 中添加 beginBackgroundTask
。
func applicationDidEnterBackground(_ application: UIApplication) {
_ = UIApplication.shared.beginBackgroundTask(expirationHandler: {
})
}
单击按钮时,我必须执行多个 API 调用以获取数据并将该数据写入文件。我正在使用操作队列和 URLSession
datatask
来实现它。在处理此 API 调用时,如果通过单击主页按钮或通过 phone 调用将应用程序置于后台,则 API 调用不会处理。
我尝试了操作队列以及 Dispatch_async()
函数,但是在调用 API 调用后将应用置于后台时没有任何效果。
API 请求甚至应该在应用程序置于后台时工作。如何实现?
为了让您的应用程序继续在后台处理信息,您需要将配置从default
更新为:
let configuration = URLSessionConfiguration.background(withIdentifier:
"com.yourapp.bundleidentifier")
您可以在这个关于 URLSession
的非常好的教程中获得更多详细信息。
如果您正在使用 datatask,那么您可以实现 backgroundTask,这在 https://medium.com/@abhimuralidharan/finite-length-tasks-in-background-ios-swift-60f2db4fa01b
中有很好的解释如果您正在使用 DownloadTask 或 UploadTask ,您可以使用配置
URLSessionConfiguration.background(withIdentifier:
"com.yourapp.bundleidentifier")
试试这个 UIApplication.shared.beginBackgroundTask(expirationHandler: { }) 及其相关 API,希望它对你有用。
在您的 AppDelegate
class 中添加 beginBackgroundTask
。
func applicationDidEnterBackground(_ application: UIApplication) {
_ = UIApplication.shared.beginBackgroundTask(expirationHandler: {
})
}