2012-09-04 65 views
6

的時候如果我有一個大文件下載去執行一個應用程序被轉移到後臺整理任務,有沒有什麼辦法讓下載執行功能還活着嗎?的iOS:進入後臺

我知道beginBackgroundTaskWithExpirationHandler:當應用程序移動到背景時被調用,我可以在那裏開始我的任務,但我不想開始新的任務,我想完成我的舊任務。它可以用beginBackgroundTaskWithExpirationHandler:來解決,但爲此我需要暫停我的下載並從正確的地方恢復它,這簡直是愚蠢的。

理想我想那是什麼我換我下載功能有過期處理程序,所以我的下載功能保持爲之後的應用程序已移至後臺允許的時間執行。

+1

http://stackoverflow.com/questions/9136890/how-should-beginbackgroundtaskwithexpirationhandler-be-dealt-with-for-an-nsurlc/9137656#9137656 – user523234

+0

謝謝,猜測這是一個更多的工作。 – SMK

回答

6

理想的情況是我想的是,我總結我的下載功能有過期處理程序,所以我的下載功能保持爲之後的應用程序已移至後臺允許的時間執行。

這就是它的工作原理。當您輸入背景時,不會調用beginBackgroundTaskWithExpirationHandler:。這是什麼電話,表明你開始的東西,如果你碰巧進入到了後臺,而它的運行,你想完成。只需用beginBackgroundTaskWithExpirationHandler:endBackgroundTask:包裝您現有的下載代碼即可。

+0

你說得對,我應該更好地閱讀文檔! – SMK

-3

當你在forground時啓動後臺線程是完全正常的。添加您的自定義到期處理程序。做一個異步請求。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 
             (unsigned long)NULL), ^(void) { 
    [self performYourStuffInTheBackGround]; 
}); 

和AppleDEV的報價;

你可能會想使用異步網絡的API。 iOS提供了各種各樣的API來執行此操作 - 從低級API(如GCD)到高級API(如NSURLConnection),其間有很多停止操作,我們鼓勵您使用它們。