Swift Note

兴趣是最好的老师

UIApplicationDelegate 各方法调用顺序

这里记录一下 UIApplicationDelegate 也就是通常 AppDelegat.swift 文件中各个方法的调用顺序。参考苹果官方文档:UIApplicationDelegate

App 状态

首先我们需要了解 App 的几个运行状态:

  • Not running app未运行
  • Inactive app在前台运行,但并没有接受到事件
  • Active 正常运行状态
  • Background 当前屏幕不可见,但并未退出,保持在后台运行
  • suspended 暂停,app 在内存中但并未被退出

委托方法

  • 加载时:
    • willFinishLaunchingWithOptions
    • didFinishLaunchingWithOptions
  • 转换到前台
    • applicationDidBecomeActive
  • 转移到后台
    • applicationDidEnterBackground
  • 转入未激活 (Inactive) 状态
    • applicationWillResignActive 离开前台状态时
    • applicationWillEnterForeground 将要从后台切换到前台时
  • 终止
    • applicationWillTerminate 只有 app 在运行(包括后台运行)时,多任务管理杀掉,或者被系统挤掉时调用,而且,app 在 suspended 状态下无论如何都不会被调用此方法
  • 接受到本地通知
    • didReceiveLocalNotification iOS 8.2后新增

还有蛮多,就不一一写了,有需要的话就到页首给到的文档链接去看吧。

需要注意的是:

  • didFinishLaunchingWithOptions 之后,app 依然是 Inactive 状态,接下来调用 applicationDidBecomeActive 后,App 才是进去前台了。
  • 按 Home 键后,会调用 applicationWillResignActive ,之后调用 applicationDidEnterBackground,之后手机回到桌面
  • 接着,我们按下 App 的图标,打开 App,假设此前 App 并没有被杀掉,则会调用 applicationWillEnterForeground,然后是applicationDidBecomeActive,然后回到应用主界面
  • 双击 Home 键,进入多任务管理界面,此时调用 applicationWillResignActive,如果直接点当前界面,回到 App 主界面,则调用 applicationDidBecomeActive,如果点其它 App ,则调用 applicationDidEnterBackground

另外参考文章:http://blog.csdn.net/fg313071405/article/details/6977682

神飞

没有什么能够阻挡,我对自由的向往