1

我已經創建了後臺nsurlsession來執行下載任務。當應用程序在後臺時它運行良好。但是,當我關閉應用程序(雙擊「Home」按鈕並向上滑動)時,下載任務似乎被取消並失敗,並且當我重新啓動應用程序時,它使我再次從頭開始下載。根據蘋果公司的文件,即使應用程序不再運行,後臺傳輸也可以工作。我做錯了什麼?關閉應用程序後臺傳輸下載任務失敗

+0

指定「背景傳送」的含義,因爲我相信你可能會錯誤地將Apple的聲明誤認爲只與「NSOperation」任務相關的聲明。 – jakenberg

+0

這與NSOperation無關。這是NSURLSession的一個功能 https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/URLLoadingSystem/Articles/UsingNSURLSession.html – LongNV

+0

就像[以前討論](http://stackoverflow.com/問題/ 25047427/does-nsurlsession-continue-file-transfer-if-app-is-killed-from-task-manager),iOS似乎(明智地)採取強制退出作爲用戶想要的提示所有應用程序活動停止,包括後臺傳輸。 –

回答

0

NSURLSessiondocumentation第一段,我們可以觀察到:

這個API提供了一套豐富的委託方法支持 認證並給出了您的應用程序執行後臺 下載當你的應用是一種能力沒有運行,或者在iOS中,您的應用程序暫停時爲 。

現在請注意它指出:

,或者在iOS上,當你的應用程序被暫停。

看起來只有OS X應用程序才能在應用程序未運行時完成後臺任務。

1

當用戶強制退出時,該應用程序不會重新啓動以用於後臺下載。

application:didReceiveRemoteNotification:fetchCompletionHandler:的iOS8上的文件說:

使用此方法來處理傳入的遠程通知你的應用程序。 與應用程序不同的是:didReceiveRemoteNotification:方法,即 僅在您的應用程序在前臺運行時調用,系統 在您的應用程序在前臺運行或 後臺運行時調用此方法。另外,如果啓用了遠程通知 後臺模式,則系統將啓動您的應用(或從 掛起狀態中將其喚醒),並在推送 通知到達時將其置於後臺狀態。但是,如果用戶強制退出,系統不會自動啓動您的應用程序 。在這種情況下, 用戶必須重新啓動您的應用或重新啓動設備,然後系統 嘗試再次自動啓動您的應用。

2

the NSURLSessionConfiguration Class Reference

如果iOS應用由系統終止並重新啓動,該應用可以使用相同的標識符來創建新的配置對象和會話和檢索分別傳輸的狀態在終止時正在進行中。此行爲僅適用於系統正常終止應用程序。 如果用戶從多任務屏幕終止應用程序,系統將取消所有會話的後臺傳輸。

所以,而如果本身的iOS事物的正常過程中關閉您的應用程序,如果你的從多任務屏幕退出後臺傳輸將繼續,它會殺死你的所有傳輸。

相關問題