2、App生命周期及AppDelegate、SceneDelegate

iOS12及以前

關(guān)于App的生命周期中的各個方法
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        return true
    }
    
    func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
        
        return true
    }
    
    //應(yīng)用程序即將被掛起時執(zhí)行
    func applicationWillResignActive(_ application: UIApplication) {
        log("app即將被掛起")
    }
    
    //應(yīng)用程序入活動狀態(tài)時(已經(jīng)被激活)時執(zhí)行
    func applicationDidBecomeActive(_ application: UIApplication) {
        log("app已經(jīng)被激活")
    }
    
    //程序進入后臺的執(zhí)行
    func applicationDidEnterBackground(_ application: UIApplication) {
        log("app已經(jīng)進入后臺")
    }
    
    //應(yīng)用程序即將回到前臺
    func applicationWillEnterForeground(_ application: UIApplication) {
        log("app即將回到前臺")
    }

    //當程序?qū)⒁顺鍪潜徽{(diào)用,一般用來數(shù)據(jù)的保存和退出前的整理工作
    func applicationWillTerminate(_ application: UIApplication) {
        log("app即將被殺死")
    }
APP常見的操作相應(yīng)的方法調(diào)用順序
  1. 啟動app
func application(_ : , willFinishLaunchingWithOptions:)
func application(_ : , didFinishLaunchingWithOptions:)
func applicationDidBecomeActive(_ : ) 
func application(_ : , didReceiveRemoteNotification:)//接受處理消息通知
  1. 雙擊home鍵或屏幕上劃使app上移掛起
func applicationWillResignActive(_ :)
  1. 再次雙擊home鍵歸位或點擊回到該應(yīng)用
func applicationDidBecomeActive(_ :)
  1. 單擊home鍵使app進入后臺
func applicationWillResignActive(_ :)
func applicationDidEnterBackground(_ :)
  1. 打開后臺運行的app
func applicationWillEnterForeground(_ :)
func applicationDidBecomeActive(_ :)
  1. 點擊通知
func applicationWillEnterForeground(_ :)
func application(_ : , didReceiveRemoteNotification:)//接受處理消息通知
func applicationDidBecomeActive(_ :)
  1. 殺死App進程
func applicationWillTerminate(_ :)
  1. app切換到其他應(yīng)用之后,再切換回來
func applicationWillEnterForeground(_ :)
func application(_ : , open url: , options: )// 應(yīng)用間傳值 支付或文件傳輸
func applicationDidBecomeActive(_ :)

iOS13

  • AppDelegate是負責應(yīng)用程序生命周期的對象,SceneDelegate負責屏幕上顯示的內(nèi)容
  • 當處理scene時,對用戶來說window(UIScene),是由UISceneSession管理的
  • 在新創(chuàng)建項目時創(chuàng)建的SceneDelegate.swift文件中有幾個默認的方法:
func scene(_:willConnectTo:options:)
func sceneDidDisconnect(_:)//場景進入后臺,但未丟棄
func sceneDidBecomeActive(_:)//場景已回到前臺,重新啟動已暫停或新開始的任務(wù)
//applicationWillTerminate 應(yīng)用被殺死
func sceneWillResignActive(_:)//場景即將進入后臺
func sceneWillEnterForeground(_:)//場景即將進入前臺
func sceneDidEnterBackground(_:)//場景已經(jīng)進入前臺

把視圖層級相關(guān)的方法從 didFinishLanchingWithOptions 遷移到 SceneDelegate 中的 willConnectTo 方法中,有兩個好處:

  1. 首先可以提高預(yù)覽結(jié)果呈現(xiàn)的速度
  2. 在應(yīng)用進入后臺時,不會做一些額外的操作,只會做一些必要的操作,使應(yīng)用快速進入睡眠狀態(tà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ù)。

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