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