2012-12-05 41 views
7

applicationDidEnterBackground總是在iOS應用程序中調用applicationWillTerminate之前?我知道applicationWillTerminate並不總是被稱爲(多任務) - 但是當它被調用時,是applicationDidEnterBackground總是先打電話?我不想將代碼複製到applicationWillTerminate中,如果它已包含在applicationDidEnterBackground中,那麼對於支持多任務處理的應用程序,我不想複製代碼。ApplicationDidEnterBackground總是在applicationWillTerminate之前調用?

+0

如果你是多任務處理,並且應用程序進入後臺,爲什麼它應該在用戶殺死之前再次通過'applicationDidEnterBackground'? – Larme

+0

我的理解是,如果用戶通過雙擊主頁按鈕並點擊未調用applicationWillTerminate的紅色減號按鈕來殺死在後臺運行的應用程序。讓我知道如果我錯了。 – SAHM

+0

@Larme也許一個很好的問題是,當IS applicationWillTerminate調用一個支持多任務的應用程序時.. – SAHM

回答

5

在ios 4.0及更高版本中applicationDidEnterBackground被調用而不是applicationWillTerminate因此您不必調用它們兩個。這裏是蘋果文檔的所述部分:

討論

在iOS中4.0和更高,這種方法,而不是稱爲 applicationWillTerminate的:方法當用戶退出支持背景執行的應用 。您應該使用此方法來釋放共享資源,保存用戶數據,使無效的定時器和 足夠的應用程序狀態信息來將您的應用程序恢復到 其當前狀態,以防稍後終止。您還應該禁止更新應用程序的用戶界面,並避免使用某些類型的共享系統資源(例如用戶的聯繫人 數據庫) 。避免在背景中使用OpenGL ES也是必不可少的。

你的這個方法的實現有大約五秒到 執行任何任務並返回。如果您需要更多時間執行 任何最終任務,則可以通過調用beginBackgroundTaskWithExpirationHandler:來請求 系統的額外執行時間。在 的練習中,您應該儘快從applicationDidEnterBackground:as 快速返回。如果在時間運行前該方法沒有返回,則應用程序終止並從內存中清除。

在退出此方法之前,您應該執行與調整用戶界面 有關的任何任務,但根據需要將其他任務(例如保存狀態)應該移動到併發調度隊列或輔助線程。 因爲它可能是您在 開始的任何後臺任務applicationDidEnterBackground:將不會運行,直到方法 退出後,您應該在 開始這些任務之前請求額外的後臺執行時間。換句話說,首先調用 beginBackgroundTaskWithExpirationHandler:然後在 調度隊列或輔助線程上運行任務。

該應用程序還張貼在其周圍會調用這個方法讓感興趣的對象有機會 的過渡響應的 同時 UIApplicationDidEnterBackgroundNotification時通知。

有關如何優雅地轉換到 背景的更多信息,以及有關如何在 退出時間開始後臺任務的信息,請參閱iOS應用程序編程指南。

希望這有助於爲您解決問題的人。 Adrian

以下是開發人員部分提供的技術說明的鏈接。它正在處理網絡和多任務處理。本文檔中使用的實際方法僅處理applicationDidEnterBackground,而自iOS 5以來,它們有一個名爲的監視器,如果網絡自動無響應,它將終止該應用程序。因此,沒有必要實際調用applicationWillTerminate並嘗試執行代碼以允許您的應用在應用終止之前完成其任務。該應用程序將進入後臺並將繼續其任務,直到完成最後一項任務。我希望這是有道理的,但這裏是鏈接。請閱讀看門狗部分。 https://developer.apple.com/library/ios/#technotes/tn2277/_index.html#//apple_ref/doc/uid/DTS40010841

希望這會有所幫助。 :)

+0

謝謝,我明白,並且我有applicationDidEnterBackground中的所有必需的代碼。我只是想弄清楚在applicationWillTerminate中包含哪些代碼以及哪些代碼沒有出現。 – SAHM

+0

我確實很欣賞關於超時applicationDidEnterBackground的評論。 – SAHM

+0

我什至不會調用任何應用程序將終止方法了。在創建必要的視圖時,我會將其保留爲默認值。從ios 5開始,我一直在調用應用程序中的所有方法都進入後臺,對我來說它工作得很好。我不知道任何其他的事情。 –

相關問題