前言:
當(dāng)一個應(yīng)用程序在后臺運行時,它在屏幕上是不可見的。當(dāng)用戶啟動另一個應(yīng)用程序或返回到主屏幕時,應(yīng)用程序從前臺切換到后臺。當(dāng)然,應(yīng)用程序也可以在后臺啟動或恢復(fù),以處理特定的事件。
失活的操作
當(dāng)一個正在前臺的應(yīng)用程序移動到后臺時,UIKit首先調(diào)用applicationWillResignActive:方法來禁用應(yīng)用程序(使App失活)。當(dāng)App失活,會做出以下幾點操作:
1、將用戶數(shù)據(jù)保存到磁盤并關(guān)閉任何打開的文件:
應(yīng)用程序被終止時,始終保存用戶數(shù)據(jù)。同樣用戶鎖住設(shè)備時,關(guān)閉文件。
2、只做對保存用戶數(shù)據(jù)至關(guān)重要的工作:
暫停調(diào)度隊列和操作隊列,不安排任何新的任務(wù)執(zhí)行。
3、讓任何正在活躍的計時器失效。(不做處理的話,倒計時退出時為35秒,幾秒后回來,還是35秒,不信試試)
4、暫停游戲。
反正,失活會阻止用戶與應(yīng)用程序交互。
切換到后臺執(zhí)行
對于正在移動到后臺的前臺應(yīng)用程序,UIKit通過調(diào)用applicationDidEnterBackground:的方法來關(guān)閉。這個方法表明您的應(yīng)用程序現(xiàn)在正在后臺運行。當(dāng)切換到后臺時,您可以在應(yīng)用程序掛起之前采取一些額外的步驟:
1、清理你的應(yīng)用程序的用戶界面。
隱藏敏感信息,排除警報和其他臨時接口,并準(zhǔn)備您的接口以獲取其快照。
2、釋放系統(tǒng)資源共享。
前臺應(yīng)用程序優(yōu)先使用共享服務(wù),如相機(jī)或系統(tǒng)數(shù)據(jù)庫。當(dāng)應(yīng)用程序被掛起時,如果應(yīng)用程序持有任何共享資源,系統(tǒng)就會終止它。
3、釋放圖像、媒體文件和臨時對象。
移除所有有關(guān)大內(nèi)存的對象(這些對象可以輕松地從磁盤重新創(chuàng)建或重新加載)。系統(tǒng)自動清空系統(tǒng)管理的緩存,包括由
NSCache對象和采用NSDiscardableContent協(xié)議的對象管理的數(shù)據(jù)。
在applicationDidEnterBackground:調(diào)用時的某個時刻,UIKit獲取應(yīng)用程序當(dāng)前界面的快照。系統(tǒng)在App switcher中使用這個快照圖像,當(dāng)你的應(yīng)用返回到前臺時,它可以替代你的應(yīng)用的啟動屏幕。在app delegate 方法中,通過刪除用戶界面中的任何敏感數(shù)據(jù)來保護(hù)用戶的隱私。當(dāng)應(yīng)用程序返回前臺時,您可以決定是立即顯示數(shù)據(jù),還是先請求用戶驗證。
而在后臺,App必須盡可能占用小一點的內(nèi)存。如果應(yīng)用程序管理大量數(shù)據(jù),可能需要將數(shù)據(jù)寫到磁盤并從內(nèi)存中刪除。例如,如果應(yīng)用程序操縱圖像數(shù)據(jù),將數(shù)據(jù)保存到磁盤,以便釋放數(shù)據(jù)緩沖區(qū)。消耗大量內(nèi)存的后臺應(yīng)用程序比占用少量內(nèi)存的應(yīng)用程序先終止。
--文中內(nèi)容總結(jié)歸納于官方文檔