【问题标题】:How to make URLSession to work when app is moved to background当应用程序移至后台时如何使 URLSession 工作
【发布时间】:2020-01-07 02:15:03
【问题描述】:

单击按钮时,我必须实现多个 API 调用来获取数据并将该数据写入文件。我正在使用操作队列和URLSessiondatatask 来实现这一点。在处理此 API 调用时,如果通过单击主页按钮或通过电话将应用置于后台,则 API 调用未处理。

我尝试了 Operation queue 以及 Dispatch_async() 函数,但在调用 API 调用后将应用置于后台时没有任何效果。

API 请求甚至可以在应用程序置于后台时工作。如何实现?

【问题讨论】:

  • 你是否尝试过使用 backgroundTask medium.com/@abhimuralidharan/…
  • 如果你正在做文件下载,那么你可以使用可以执行后台的NSURLSession下载任务

标签: ios swift background urlsession nsurlsessiondatatask


【解决方案1】:

如果你使用的是datatask,那么你可以实现https://medium.com/@abhimuralidharan/finite-length-tasks-in-background-ios-swift-60f2db4fa01b中很好解释的backgroundTask

如果你使用的是 DownloadTask 或 UploadTask ,你可以使用配置

URLSessionConfiguration.background(withIdentifier:
                                   "com.yourapp.bundleidentifier")

【讨论】:

  • 谢谢,@jpulikkottil。中篇文章帮助很大。
  • 当应用程序在前台运行时设备被锁定时是否同样工作?
【解决方案2】:

在您的 AppDelegate 类中添加 beginBackgroundTask

func applicationDidEnterBackground(_ application: UIApplication) {

    _ = UIApplication.shared.beginBackgroundTask(expirationHandler: {

    })
}

【讨论】:

    【解决方案3】:

    为了让你的应用继续在后台处理信息,你需要将配置从default更新为:

    let configuration = URLSessionConfiguration.background(withIdentifier:
                                       "com.yourapp.bundleidentifier")
    

    您可以在这个关于URLSession 的非常好的教程中获得更多详细信息。

    【讨论】:

      【解决方案4】:

      试试这个 UIApplication.shared.beginBackgroundTask(expirationHandler: { }) 及其相关的 API,希望它对你有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-19
        • 1970-01-01
        • 2019-10-03
        相关资源
        最近更新 更多