2016-12-03 68 views
2

如果一個應用程序依賴於後臺獲取和需要做一些處理,如果獲取的數據不是空的,它是有意義的事:在後臺獲取期間使用背景nsurlsession和後臺任務是否合理?

1)取得與背景NSURLSession(使用backgroundSessionConfigurationWithIdentifier)數據

2 )在後臺任務中處理數據(使用beginBackgroundTask)

由於系統提供了30秒來完成後臺提取,因此似乎不需要#1或#2。文檔(https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html)沒有明確說明這些技術是否可以合併,所以我只是尋求確認。

回答

2

好吧,經過一些挖掘背景後,我想我可以至少部分回答自己的問題,爲那些仍然懷疑。

  1. 背景獲取與背景配置NSURLSession

    • 該應用僅具有30秒才能完成背景期間下載取。如果整個 下載流程所需時間少於此限制,則可以使用 默認URLSession(無後臺配置)。

    • 但是,如果要加載的資源很大,它非常有意義 花給予30秒(或更少)的準備和啓動 URLSession與後臺配置。配置完成後,您的NSURLSession對象將無縫切換下載 任務到系統,以便資源轉移不會成爲30秒完成限制的主題 。與後臺任務

      • 使用後臺任務的應用程序可以通過最多3分鐘,以完成一個相對長期運行的任務推遲懸掛

    • 背景獲取(例如短文件上傳,下載,文件I/O等),可能已經由用戶在前臺發起。

    • 與StackOverflow中提供的許多示例相反,您不需要等到應用程序移至背景爲止。在beginBackgroundTask/endBackgroundTask中執行時間少於3分鐘的任務,即使在前臺執行應用程序時也是如此。我會繼續並聲稱,在每種情況下,如果沒有beginBackgroundTask/endBackgroundTask作用域運行此類任務,這是一個錯誤,因爲編寫處理applicationDidEnterBackground的代碼來跟蹤完成長時間運行的任務是非常痛苦的用戶與UI的交互。
    • 如果希望通過UI和系統的後臺提取啓動下載作業,則重複使用相同的代碼並將兩種技術組合在一起是完全不錯的。