iOS App生命周期及AppDelegate方法

Posted Jamwong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS App生命周期及AppDelegate方法相关的知识,希望对你有一定的参考价值。

ios 12 及之前

一、APP的生命状态:

  • Not running(未运行):程序未运行
  • Inactive(未激活):程序在前台运行,但没有接收到事件。在没有事件处理情况下程序通常停留在这个状态。
  • Active ( 激活 ): 程序在前台运行而且接收到了事件。这也是前台的一个正常的模式。
  • Backgroud ( 后台 ): 程序在后台而且能执行代码,大多数程序进入这个状态后会在在这个状态上停留一会。时间到之后会进入挂起状态(Suspended)。有的程序经过特殊的请求后可以长期处于Backgroud状态。
  • Suspended ( 挂起 ): 程序在后台但是却不能执行代码。系统会自动把程序变成这个状态而且不会发出通知。当挂起时,程序还是停留在 内存中的,当系统内存低时,系统就把挂起的程序清除掉,为前台程序提供更多的内存。

二、 关于app生命周期中的各方法

func application(_:willFinishLaunchingWithOptions:)
func application(_:didFinishLaunchingWithOptions:)
// app初始化

func applicationDidBecomeActive(UIApplication)
// app已经被激活

func applicationWillResignActive(UIApplication)
// app即将被挂起

func applicationDidEnterBackground(UIApplication)
// app已经进入后台

func applicationWillEnterForeground(UIApplication)
// app即将回到前台

func applicationWillTerminate(UIApplication)
// app即将被杀死

三、App运行过程中根据状态变化代理方法的调用顺序

  • 启动app:
application(_:willFinishLaunchingWithOptions:)
application(_:didFinishLaunchingWithOptions:)
applicationDidBecomeActive(UIApplication)
application:didReceiveRemoteNotification//接受处理消息通知
  • 双击home键使app上移挂起
applicationWillResignActive(UIApplication)
  • 再次双击home键使app下移归位
applicationDidBecomeActive(UIApplication)
  • 单击home键使app进入后台
applicationWillResignActive(UIApplication)
applicationDidEnterBackground(UIApplication)
  • 打开正运行在后台的app
applicationWillEnterForeground(UIApplication)
applicationDidBecomeActive(UIApplication)
  • 再次切到后台
applicationWillResignActive(UIApplication)
applicationDidEnterBackground(UIApplication)
  • 点击通知中心里面的远程推送,使App从后台 进入前台
applicationWillEnterForeground(UIApplication)
application:didReceiveRemoteNotification // 接收、处理消息通知
applicationDidBecomeActive(UIApplication)
  • 杀死App进程(终止程序)
applicationWillTerminate(UIApplication)
  • 从APP切换到微信之类的其他应用之后,再切换回来时
applicationWillEnterForeground(UIApplication)
application:openURL:sourceApplication // 应用间传值
applicationDidBecomeActive(UIApplication)

iOS 13 之后

一、查看一下新的Xcode项目模板

在新的Xcode11当中创建新的项目,会看到自动生成AppDelegate.swiftSceneDelegate.swift文件。
除了这两个委托文件之外,Xcode还做了其他一些事情。打开Info.plist,会看到一个叫做Application Scene Manifest的新key。

Enable Multiple Windows默认键值为NO,如果设置为YES则允许你的app在ipadOS中多开。
Application Session Role数组中:

  • Configuration的名称,必须是唯一的
  • scene的代理类名,通常为SceneDelegate。
  • scene用于创建初始UI的storyboard名称。(该设置可以在Xcode 12项目的Project Properties配置中找到。)

AppDelegate中的SceneDelegate、UISceneSession和Application Scene Manifest是如何一起创建多窗口应用的呢?