赞
踩
每个iPhone应用程序都有一个UIApplication,UIApplication是iPhone应用程序的开始并且负责初始化并显示 UIWindow,并负责加载应用程序的第一个UIView到UIWindow窗体中。UIApplication的另一个任务是帮助管理应用程序的 生命 周期,而UIApplication通过一个名字为UIApplicationDelegate的代理类来履行这个任务。尽管 UIApplication 会负责接收事件,而UIApplicationDelegate则决定应用程序如何去响应这些事 件,UIApplicationDelegate可以处理 的事件包括应用程序的生命周期事件(比如程序启动和关闭)、系统事件(比如来电、记事项警 告),本文会介绍如何加载应用程序的UIView到 UIWindow以及如何利用UIApplicationDelegate处理系统事件。
Not running:未运行,程序没有启动。
Inactive:未激活,程序在前台运行,但没有接收到任何事件,或被其他任务强制占用了,例如突然来了电话、程序在前台时手机自动锁屏等。在没有事件处理情况下程序通常停留在这个状态。
Active:激活,程序在前台运行而且接收到事件。这也是前台的一个正常的模式。
Backgroud:后台,程序在后台但能执行代码,大多数程序进入后台状态后,只会在后台状态上停留一段时间,当时间到了之后会进入挂起状态(Suspended)。有的程序经过特殊的请求后可以长期处于Backgroud状态而不进入挂起状态(Suspended)。
Suspended:挂起,程序在后台不能执行代码。系统会自动把后台程序变成这个状态而且不会发出通知。当挂起时,程序仍驻留在内存中。当系统内存不足时,系统就会把挂起的程序清除掉,为前台的程序提供更多的内存。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ChHg12ht-1641890651119)(/Users/yichen/Library/Application Support/typora-user-images/image-20211224134019851.png)]
(1)willFinishLaunching:
//willFinishLaunching:程序将要完成启动。只在程序启动时执行一次。launchOptions:存存储程序启动的原因。
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
return YES;
}
(2) didFinishLaunching:
didFinishLaunching是在app显示界面给用户之前最后执行的状态,理所当然我们可以在这个方法内完成一些基本的初始化,但是应该是轻量级的初始化操作,不然会导致程序启动时间长。
//didFinishLaunching是在app显示界面给用户之前最后执行的状态,理所当然我们可以在这个方法内完成一些基本的初始化,但是应该是轻量级的初始化操作,不然会导致程序启动时间长,影响用户体验。 //例如: //不使用StoryBoard,需要配置window //第三方登录sdk注册,以及很多第三方sdk的初始化配置 //判断程序接下来的业务逻辑,播不播放引导图片?播不播放开屏广告?有没有登录? - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //若用户直接启动,launchOptions内无数据。 //若由其他程序通过openURL:启动。 //launchOptions中UIApplicationLaunchOptionsURLKey的数据为openURL:的参数url。 //launchOptions中UIApplicationLaunchOptionsSourceApplicationKey的数据为启动本程序的源程序的bundle ID(NSString)。 NSURL *url = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey]; if (url) { [self launchOptionsWithURL:url]; } NSString *bundleId = [launchOptions objectForKey:UIApplicationLaunchOptionsSourceApplicationKey]; if (bundleId) { [self launchOptionsWithBundleId:bundleId]; } //若由远程通知启动。 //launchOptions中UIApplicationLaunchOptionsRemoteNotificationKey对应数据为启动本程序的远程通知信息useinfo(NSDictionary)。 NSDictionary *useinfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; if (useinfo) { [self launchOptionsWithUseinfo:useinfo]; } return YES; }
(3) DidBecomeActive:
DidBecomeActive:程序已激活。程序在处于前台时调用:程序第一次启动时、从后台返回前台时。
若程序之前在后台,可以在这方法内重新拉取数据,刷新用户界面。
//程序第一次启动,从后台到前台时调用。
- (void)applicationDidBecomeActive:(UIApplication *)application {
//程序进入前台时,记录当前时间
}
(4) WillResignActive:
WillResignActive:程序将要进入未激活。程序在处于前台时调用:有电话打进来、手机锁屏等。程序被其他任务强制占用了,就会调用这个方法,此方法也称之为中断方法。
- (void)applicationWillResignActive:(UIApplication *)application{
//程序准备进入后台通知相关VC 记录当前时间
}
(5) DidEnterBackground:
作用是:
//程序已经进入后台时调用
- (void)applicationDidEnterBackground:(UIApplication *)application {
//
}
**(6)WillEnterForeground **:
WillEnterForeground:程序将要进入前台。程序从后台进入前台时调用。WillEnterForeground主要用于撤销WillResignActive中做的操作。
//程序将要进入前台。程序从后台进入前台时调用。
-(void)applicationWillEnterForeground:(UIApplication *)application {
}
(7)WillTerminate:
WillTerminate:程序将要终止。程序终止之前调用。
//目的就是为了保留一些重要的数据,方便下次启动后的恢复,达到一种让用户感觉该程序永远运行在后台从来没被终止过的感觉
- (void)applicationWillTerminate:(UIApplication *)application{
}
启动程序:
前台进入后台:
后台进入前台:
终止程序:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。