App在后臺運行的思與做

前言:

當(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é)歸納于官方文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容