APP生命周期

APP生命周期

线程有状态的变化,app也有,下面我们先看看应用的几个状态

一、应用的状态

1、app的状态

  • Not running:app未运行的状态;

  • Inactive:app处于前台,但是没有接收事件

  • Active:app处于前台,开始接收事件

  • Background:app运行在后台,但是正在处理相关后台逻辑

  • Suspended:程序在后台不处理相关逻辑

app状态变化的时候,系统会以delegate或通知的方式通知我们,我们可以做出相应的处理,下面我们看一下app的delegate方法

2、app的delegate方法

(1)初始化的相关方法

  • app开始启动,Storyboards或者nib文件已经被加载,但是app状态还没有保存,此时处于inactive状态
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions

(2)Launch

  • app完成启动,状态已经保存,但是UI还没有创建,可以创建keyWindow
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
  • didFinishLaunchingWithOptions:或者app在打完电话等系统中断事件处理完毕再次进入前台将调用此方法
-(void)applicationWillEnterForegroud:(UIApplication *)application
  • 在applicationWiillEnterForeground之后调用,完成到前台的转换,可以处理UI或者运行时工作
-(void)applicationDidBecomeActive:(UIApplication *)application

​ 可以在这里展示widow(如果有需要)、改变当前展示的vc(如果有需要)\更新view的数据、状态等等;开启定时任务、更新相关状态等等

(3)Termination相关方法

  • 例如接听电话、按home键等,使app进入inactive时调用该方法
-(void)applicationWillResignActive:(UIApplication *)application

保存用户数据、暂停计时器、挂起dispatch或者operation 队列;不适合进行新的Metal 工作、OpenGL工作

  • app进入inactive之后会进入后台,此时这个方法被调用。有几秒保存app状态、处理清除工作
-(void)applicationDidEnterBackground:(UIApplication *)application

释放文件中读取的图片、媒体内容;释放占用内存的对象;释放摄像头、麦克风等硬件资源;隐藏alert等提示信息,隐藏用户敏感信息;完成Metal和OpenGL相关内容

  • 系统将释放app占用的内存时调用,可以保存数据、做一下清除工作
-(void)applicationWillTerminate:(UIAppliication *)application

版权声明:本文为u011774517原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。