APPDelegate----launchOptions启动类型
先明白,每个iPhone应用程序都有一个UIApplication,UIApplication是iPhone应用程序的开始并且负责初始化并显 示 UIWindow,并负责加载应用程序的第一个UIView到UIWindow窗体中。UIApplication的另一个任务是帮助管理应用程序的 生命 周期,而UIApplication通过一个名字为UIApplicationDelegate的代理类来履行这个任务。尽管 UIApplication 会负责接收事件,而UIApplicationDelegate则决定应用程序如何去响应这些事 件,UIApplicationDelegate可以处理 的事件包括应用程序的生命周期事件(比如程序启动和关闭)、系统事件(比如来电、记事项警 告),本文会介绍如何加载应用程序的UIView到 UIWindow以及如何利用UIApplicationDelegate处理系统事件。
通 常对于UIApplication读者是没必要修改它的,只需要知道UIApplication接收系统事件即可,而如何编写代码来处理这些系统事件 则 是程序员的工作。处理系统事件需要编写一个继承自UIApplicationDelegate接口的类,而 UIApplicationDelegate接 口提供生命周期函数来处理应用程序以及应用程序的系统事件,这些生命周期函数如下表所示:
1、- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSLog(@"当程序载入后执行");
}
说明:当程序载入后执行,应用程序启动入口。只在应用程序启动时执行一次。也就是说在应用程序启动后,要执行的委托调用。application参数用来获取应用程序的状态、变量等,值得注意的是字典参数:(NSDictionary *)launchOptions,该参数存储程序启动的原因。
若用户直接启动,lauchOptions内无数据;
若由其他应用程序通过openURL:启动,则UIApplicationLaunchOptionsURLKey对应的对象为启动 URL(NSURL),UIApplicationLaunchOptionsSourceApplicationKey对应启动的源应用程序的 bundle ID (NSString);
若由本地通知启动,则UIApplicationLaunchOptionsLocalNotificationKey对应的是为启动应用程序的的本地通知对象(UILocalNotification);
若由远程通知启动,则UIApplicationLaunchOptionsRemoteNotificationKey对应的是启动应用程序的的远程通知信息userInfo(NSDictionary);
其他key还有UIApplicationLaunchOptionsAnnotationKey,UIApplicationLaunchOptionsLocationKey,
UIApplicationLaunchOptionsNewsstandDownloadsKey。
如果要在启动时,做出一些区分,那就需要在下面的代码做处理。比如:应用可以被某个其它应用调起(作为该应用的子应用),要实现单点登录,那就需要在启动代码的地方做出合理的验证,并跳过登录。
例子:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSURL *url = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey];
if(url)
{
}
NSString *bundleId = [launchOptions objectForKey:UIApplicationLaunchOptionsSourceApplicationKey];
if(bundleId)
{
}
UILocalNotification * localNotify = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
if(localNotify)
{
}
NSDictionary * userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if(userInfo)
{
}
}
2、- (void)applicationWillResignActive:(UIApplication *)application
{
NSLog(@"应用程序将要进入非活动状态,即将进入后台");
}
在应用程序将要由活动状态切换到非活动状态时候,要执行的委托调用,如 按下 home 按钮,返回主屏幕,或全屏之间切换应用程序等。
说明:当应用程序将要进入非活动状态时执行,在此期间,应用程序不接收消息或事件,比如来电话了。
3、- (void)applicationDidEnterBackground:(UIApplication *)application
{
NSLog(@"如果应用程序支持后台运行,则应用程序已经进入后台运行");
}
说明:当程序被推送到后台的时候调用。所以要设置后台继续运行,则在这个函数里面设置即可
4、- (void)applicationWillEnterForeground:(UIApplication *)application
{
NSLog(@"应用程序将要进入活动状态,即将进入前台运行");
}
说明:当程序从后台将要重新回到前台时候调用,这个刚好跟上面的那个方法相反。
5、- (void)applicationDidBecomeActive:(UIApplication *)application
{
NSLog(@"应用程序已进入前台,处于活动状态");
}
说明:当应用程序进入活动状态时执行,这个刚好跟上面那个方法相反 。
6、- (void)applicationWillTerminate:(UIApplication *)application
{
NSLog(@"应用程序将要退出,通常用于保存数据和一些退出前的清理工作");
}
说明:当程序将要退出是被调用,通常是用来保存数据和一些退出前的清理工作。这个需要要设置UIApplicationExitsOnSuspend的键值。
7、- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
NSLog(@"系统内存不足,需要进行清理工作");
}
说明:iPhone设备只有有限的内存,如果为应用程序分配了太多内存操作系统会终止应用程序的运行,在终止前会执行这个方法,通常可以在这里进行内存清理工作防止程序被终止。
8、-(void)applicationSignificantTimeChange:(UIApplication *)application
{
NSLog(@"当系统时间发生改变时执行");
}
说明:当系统时间发生改变时执行
9、- (void)application:(UIApplication)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame
{
NSLog(@"StatusBar框将要变化");
}
说明:当StatusBar框将要变化时执行
10、- (void)application:(UIApplication*)application willChangeStatusBarOrientation:
(UIInterfaceOrientation)newStatusBarOrientation duration:(NSTimeInterval)duration
{
}
说明:当StatusBar框方向将要变化时执行
11、- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url
{
}
说明:当通过url执行
12、- (void)application:(UIApplication*)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation
{
}
说明:当StatusBar框方向变化完成后执行
13、- (void)application:(UIApplication*)application didChangeSetStatusBarFrame:(CGRect)oldStatusBarFrame
{
}
说明:当StatusBar框变化完成后执行
另外还有一些协议方法需要知道:
Handling Remote Notifications (处理远程消息)
说明:当一个运行着的应用程序收到一个远程的通知 发送到委托去...
-(void) application:(UIApplication *) applicationdidRegisterForRemoteNotificationsWithDeviceToken:(NSData *) deviceToken
说明:当一个应用程序成功的注册一个推送服务(APS) 发送到委托去...
-(void) application:(UIApplication *) applicationdidFailToRegisterForRemoteNotificationsWithError:(NSError *) error
说明:当 APS无法成功的完成向 程序进程推送时 发送到委托去...
Handling Local Notification (处理本地消息)
说明:当一个运行着的应用程序收到一个本地的通知 发送到委托去...
Responding to Content Protections Changes(响应受保护内容的改变)
-applicationProtectedDataWillBecomeUnavailable:
说明:通知委托,受保护的文件当前变为不可用的
-applicationProtectedDataWillBecomeAvailable:
说明:通知委托 受保护的文件当前变为可用
APPDelegate----launchOptions启动类型的更多相关文章
- 如何确定windows启动类型是bios还是uefi
原文地址:http://www.kqidong.com/bios/3728.html 如何确定windows启动类型是bios还是uefi?随着装机越来越简单,大家对安装系统充满信心,但是了解到启动类 ...
- Delphi启动/停止Windows服务,启动类型修改为"自动"
unit U_StartServices; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Contr ...
- windows服务的默认启动类型和登录帐户
转自:http://www.winhelponline.com/blog/windows-7-services-default-startup-type/ Service Name Startup T ...
- 在windows service中启动类型“Automatic” 和 “Automatic (Delayed start)” 有何不同?
问题: When installing Windows services there are two options for automatically starting a Windows serv ...
- 服务启动项 Start类型详解
注册表的服务启动项 Start类型详解 HKLM\SYSTEM\CurrentControlSet\services\ 下的服务项.不论有没有在services.msc服务管理控制台中显示,在注册表中 ...
- Coding源码学习第一部分(AppDelegate.m)
前言:在此首先感谢开源,感谢大神们的无私分享. Coding 的主页:https://coding.net/app#app-feature Coding 自己家的仓库:https://coding.n ...
- iOS开发 关于启动页和停留时间的设置
引言: 在开发一款商业App时,我们大都会为我们的App设置一个启动页. 苹果官方对于iOS启动页的设计说明: 为了增强应用程序启动时的用户体验,您应该提供一个启动图像.启动图像与应用程序的首屏幕看起 ...
- iOS项目启动及启动时间优化
app的启动入口Main函数: int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc ...
- 服务器重启后SQL Server Agent由于"The EventLog service has not been started" 启动失败
案例环境: 操作系统 : Microsoft Windows Server 2003 Standard Edtion SP2 数据库版本 : SQL Server 2005 Standard Ed ...
随机推荐
- RedHat Linux下利用sersync进行实时同步数据
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://linux5588.blog.51cto.com/65280/772054 拓扑图 ...
- Nginx-/etc/sysctl.conf 参数解释
来自<深入理解Nginx模块开发与架构解析> P9 #表示进程(例如一个worker进程)可能同时打开的最大句柄数,直接限制最大并发连接数 fs. #1代表允许将状态为TIME-WAIT状 ...
- SharePoint入门识记
SharePoint站点层次结构: 1.Web Application: 一般创建后对应一个IIS Web Site, 默认创建后是打不开的,因为网站没有任何内容. 2.Site Collection ...
- android数据存储之Sqlite(一)
SQLite学习笔记 1. Sqlite简介 SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入 式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低 ...
- java.sql.SQLException: Io 异常: Connection reset
当数据库连接池中的连接被创建而长时间不使用的情况下,该连接会自动回收并失效,但客户端并不知道,在进行数据库操作时仍然使用的是无效的数据库连接,这样,就导致客户端程序报“ java.sql.SQLExc ...
- ASP.NET MVC几种找不到资源的问题解决办法
转自:http://www.cnblogs.com/xyang/archive/2011/11/24/2262003.html 在MVC中,controller中的Action和View中的.csht ...
- BI案例:KPI在商业智能中的应用(ZT)
KPI(Key Performance Indication)即关键业绩指标,是通过对组织内部某一流程的输入端.输出端的关键参数进行设置.取样.计算.分析,衡量流程绩效的一种目标式量化管理指标,是把企 ...
- spring-boot支持双数据源mysql+mongo
这里,首先想说的是,现在的web应用,处理的数据对象,有结构化的,也有非结构化的.同时存在.但是在spring-boot操作数据库的时候,若是在properties文件中配置数据源的信息,通过默认配置 ...
- [原]网络库libevent在Visual Studio中的使用方法
libevent是一个事件触发的网络库,适用于windows.linux.bsd等多种平台,内部使用select.epoll.kqueue等系统调用管理事件机制.著名分布式缓存软件memcached也 ...
- JSON.stringify(),JSON.parse(),toJSON()方法使用
JSON.stringify(),将value(Object,Array,String,Number...)序列化为JSON字符串 JSON.parse(), 将JSON数据解析为js原生值 ...