蘋果的"App States and Multitasking"文件(見「怎麼辦時,移動到後臺」)說保存,當應用程序被切換到後臺:調度保存操作:
保存用戶數據和應用程序的狀態信息。進入後臺時,所有未保存的更改都應寫入磁盤。這一步是必要的,因爲您的應用程序可能會因爲多種原因而在後檯安靜地死亡。您可以根據需要從後臺線程執行此操作。
當我開始分派操作時,如下圖所示,需要一些時間在applicationDidEnterBackground:
上進行保存,當按下home鍵時,我沒有得到NSLog輸出。返回到應用程序後,出現NSLog輸出。
- (void)applicationDidEnterBackground:(UIApplication *)application {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self performOperation];
NSLog(@"Operation finished");
});
}
我可以肯定的說完全執行performOperation
方法還是根本中斷時,應用程序進入睡眠模式?
感謝你的代碼示例。我還有一些問題:1.是否需要UIApplicationExitsOnSuspend?我沒有設置它,調用了'applicationDidEnterBackground:'。 2.不應將'bgTask'聲明爲塊變量,並且在[self performOperation]之後的調度塊中也應該調用'[app endBackgroundTask:bgTask]; bgTask = UIBackgroundTaskInvalid;'? 3.當用戶在操作完成之前或後臺任務結束之前再次點擊應用時會發生什麼? – FrankZp 2013-03-05 07:01:08
1. UIApplicationExitsOnSuspend是不需要的,除非你想改變默認行爲,我只是確保你知道它/沒有設置不同的W/O知道等等。2.你是正確的,bgTask應該是一個塊變量我做了編輯。 3.如果用戶進入前臺,則不會調用預定的到期處理程序,因爲backgroundtask沒有過期。 ApplicationDidEnterForeground被調用。您在調度隊列上執行的操作不會受到影響,因爲應用程序在所有這些操作期間保持活動狀態,它將根據需要繼續進行。 – 2013-03-06 17:10:25