是applicationDidEnterBackground
總是在iOS應用程序中調用applicationWillTerminate
之前?我知道applicationWillTerminate
並不總是被稱爲(多任務) - 但是當它被調用時,是applicationDidEnterBackground
總是先打電話?我不想將代碼複製到applicationWillTerminate
中,如果它已包含在applicationDidEnterBackground
中,那麼對於支持多任務處理的應用程序,我不想複製代碼。ApplicationDidEnterBackground總是在applicationWillTerminate之前調用?
回答
在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
希望這會有所幫助。 :)
- 1. applicationWillTerminate/ApplicationDidEnterBackground issues
- 2. applicationWillTerminate和applicationDidEnterBackground不會被調用
- 3. 當應用程序崩潰時,'applicationWillTerminate'或'applicationDidEnterBackground'會被調用嗎?
- 4. 越來越applicationWillTerminate和applicationDidEnterBackground工作
- 5. applicationDidEnterBackground和applicationWillTerminate在用戶向上滑動時退出應用程序時調用
- 6. applicationWillTerminate在4.3中調用
- 7. applicationWillTerminate在調用時崩潰
- 8. applicationDidEnterBackground:未被調用
- 9. 手動調用applicationDidEnterBackground
- 10. 爲什麼在調用存儲過程之前總是調用sp_sproc_columns?
- 11. applicationDidEnterBackground&applicationWillResignActive不被調用
- 12. Netbeans在調試之前總是運行maven build
- 13. VS2010不總是在調試之前構建
- 14. 如何在applicationDidEnterBackground中調用函數?
- 15. 在iOS4的applicationWillEnterForeground可能會叫applicationDidEnterBackground之前,它使問題
- 16. 在調用初始ViewController ViewDidLoad之前,CoreData和NSUserDefaults是否總是加載?
- 17. 總是調用當前類的方法
- 18. Android:onCreate之後總是調用onResume?
- 19. Android - onConfigurationChanged()在暫停之前調用Activity之前調用Activity
- 20. 設置DependencyProperty值時,是在調用Coercion之前還是之後調用Validation?
- 21. NSFetchedResultsController:我應該在調用-performFetch之前總是檢查fetchedObjects == nil嗎?
- 22. Android Loaders生命週期,或者:onStopLoading()總是在onReset()之前調用?
- 23. 在調用javascript函數之前總是會創建全局變量嗎?
- 24. applicationDidEnterBackground
- 25. onResume在onMapReady之前調用
- 26. 在initWithNibName之前調用ViewDidLoad?
- 27. viewDidLoad在applicationDidFinishLaunching之前調用
- 28. viewDidLoad在init之前調用?
- 29. viewDidLoad在IBAction之前調用?
- 30. CGContextMoveToPoint在CGContextShowText之前調用
如果你是多任務處理,並且應用程序進入後臺,爲什麼它應該在用戶殺死之前再次通過'applicationDidEnterBackground'? – Larme
我的理解是,如果用戶通過雙擊主頁按鈕並點擊未調用applicationWillTerminate的紅色減號按鈕來殺死在後臺運行的應用程序。讓我知道如果我錯了。 – SAHM
@Larme也許一個很好的問題是,當IS applicationWillTerminate調用一個支持多任務的應用程序時.. – SAHM