美文网首页
iOS APPDelegate和app生命周期

iOS APPDelegate和app生命周期

作者: cain07 | 来源:发表于2023-07-10 23:06 被阅读0次

    AppDelegate的作用

    AppDelegate是一个用于管理应用共享行为的对象。它继承了UIResponder类,实现了UIApplicationDelegate代理协议。AppDelegate实际上是应用的根对象,和UIApplication一起管理系统的一些交互。UIKit在应用启动周期的早期就创建了AppDelegate对象,所以它会一直存在。

    AppDelegate可以被用来处理以下任务:
    初始化应用的中心数据结构
    配置应用场景
    响应外部的通知,例如 内存不足、下载完成等
    响应针对应用本身的事件,例如 应用被唤醒、被打断等
    在启动时注册服务,例如Apple Push Notification服务

    app的5种状态

    未运行状态(not running state)
    应用还未被启动,或已经被系统终止
    不活跃状态(inactive state)
    应用进入前台,但是未收到任何事件
    活跃状态(active state)
    应用进入前台,并且可以处理事件
    后台状态(background state)
    如果有可执行代码,应用将会执行代码;如果没有可执行代码,或已经执行结束,应用将立即被挂起
    挂起状态(suspended state)
    应用在内存中,不再执行代码。如果系统内存不足,将终止应用

    app的生命周期函数

    // 告诉AppDelegate应用开始初始化,但状态恢复尚未发生
    func application(UIApplication, willFinishLaunchingWithOptions: [UIApplication.LaunchOptionsKey : Any]?)
    
    // 初始化完成,应用开始运行
    func application(UIApplication, didFinishLaunchingWithOptions: [UIApplication.LaunchOptionsKey : Any]?)
    
    // 应用已经进入活跃状态
    func applicationDidBecomeActive(UIApplication)
    
    // 应用将进入非活跃状态
    func applicationWillResignActive(UIApplication)
    
    // 应用进入后台
    func applicationDidEnterBackground(UIApplication)
    
    // 应用将进入前台
    func applicationWillEnterForeground(UIApplication)
    
    // 应用将被终止
    func applicationWillTerminate(UIApplication)
    
    

    app的状态变化和相应的生命周期函数

    冷启动(启动时app被kill或者没有被打开过)
    willFinishLaunchingWithOptions(初始化应用)→didFinishLaunchingWithOptions(完成初始化)→applicationDidBecomeActive(应用进入前台,变成活跃状态)

    热启动(启动时app被切到后台)
    当用户点开在后台的应用,系统会将应用转为不活跃状态,然后变成活跃状态
    applicationWillEnterForeground(应用重启,进入不活跃状态) →applicationDidBecomeActive(应用进入前台,变成活跃状态)

    手动kill app
    applicationWillResignActiveapplicationDidEnterBackgroundapplicationWillTerminate

    被来电打断,再重新回到app
    应用会暂时进入不活跃状态,并维持这个状态直到用户选择接受,或忽视中断。如果用户忽视中断,应用将重新进入活跃状态,否则应用将被挂起。
    忽视中断:
    applicationWillResignActive(收到来电,应用进入不活跃状态)→applicationDidBecomeActive(拒绝来电,应用进入活跃状态)
    接受中断:
    applicationWillResignActive(收到来电,应用进入不活跃状态)→applicationDidEnterBackground(接听来电,应用被挂起)

    拓展

    除了在AppDelegate,其他地方如何监听app的生命周期
    可以通过通知来监听app的生命周期
    didFinishLaunchingNotification
    didBecomeActiveNotification
    didEnterBackgroundNotification
    willEnterForegroundNotification
    willResignActiveNotification
    willTerminateNotification

    app进入后台时,可以执行代码吗?
    可以。

    当app进入后台处于挂起状态时,会被哪些事件唤醒
    定时事件、推送、位置更新、下载完成通知等

    为何[UIApplication.State]
    (https://developer.apple.com/documentation/uikit/uiapplication/state)只有3个状态

    因为我们只能判断应用是否活跃,是否在后台,所以UIApplication.State只有active, inactive, background三种状态。

    https://developer.apple.com/documentation/uikit/uiapplicationdelegate
    https://manasaprema04.medium.com/application-life-cycle-in-ios-f7365d8c1636

    相关文章

      网友评论

          本文标题:iOS APPDelegate和app生命周期

          本文链接:https://www.haomeiwen.com/subject/oaryudtx.html