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

时间:2014-05-23 12:40:24

标签: ios background upload

当iOS应用程序在后台时,是否真的无法运行UPLOAD任务?这是荒唐的。一直在查看NSURLSessionUploadTaskdispatch_after甚至NSTimer等各种内容,但没有任何内容比应用程序在后台运行后的10秒钟更有效。

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

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

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

感谢任何帮助:(

1 个答案:

答案 0 :(得分:16)

如果在实例化URLSession时使用background(withIdentifier:)进行配置,则可以在后台使用iOS 7+继续上传。

注意:


顺便说一下,如果你不想使用后台NSURLSession,但是你想在应用程序离开后台后继续运行一个有限长度的任务超过几秒钟,你可以请求使用UIApplication方法beginBackgroundTaskWithExpirationHandler的更多时间。这将为您提供几分钟的时间来完成您正在处理的任何任务。请参阅Extending Your App's Background Execution Time中的清单1:

func sendDataToServer( data : NSData ) {
   // Perform the task on a background queue.
   DispatchQueue.global().async {
      // Request the task assertion and save the ID.
      self.backgroundTaskID = UIApplication.shared.
                 beginBackgroundTask (withName: "Finish Network Tasks") {
         // End the task if time expires.
         UIApplication.shared.endBackgroundTask(self.backgroundTaskID!)
         self.backgroundTaskID = UIBackgroundTaskInvalid
      }

      // Send the data synchronously.
      self.sendAppDataToServer( data: data)

      // End the task assertion.
      UIApplication.shared.endBackgroundTask(self.backgroundTaskID!)
      self.backgroundTaskID = UIBackgroundTaskInvalid
   }
}