#import "AppDelegate.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
#pragma mark 告诉代理进程启动但还没有进入状态保存
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSLog(@"1.willFinishLaunchingWithOptions");
return YES;
}
#pragma mark 告诉代理启动基本完成程序准备开始运行
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSLog(@"2.didFinishLaunchingWithOptions");
return YES;
/**
1,此时控件才加载完成,才能获取到控件的具体frame值。
*/
}
#pragma mark 程序进入活跃状态执行,在此期间应用程序可以接收消息或者事件。
- (void)applicationDidBecomeActive:(UIApplication *)application
{
NSLog(@"3.applicationDidBecomeActive");
/**
当程序回到active状态,
applicationDidBecomeActive: 方法应该上面提到的任务重新开始,
比如重新开始timer,继承分发队列,提高OpenGL ES的帧率。
不过游戏要回到暂停状态,不能自动开始。
*/
}
#pragma mark 当程序将要进入非活跃状态执行,在此期间,应用程序不接收消息或者事件,比如来电话了
- (void)applicationWillResignActive:(UIApplication *)application {
NSLog(@"4.applicationWillResignActive");
/**响应中断: 当一个基于警告式的中断发生时,程序会进入Inactive状态。
1.停止timer和其他周期性的任务
2.停止任何正在运行的请求
3.暂停视频播放器
4.如果是游戏那么就暂停他
5.减少OpenGL ES的帧率
6.挂起任何分发的队列和不重要的操作队列(可以继续处理网络请求或者其他时间敏感的后台任务)
*/
}
#pragma mark 当程序被推送到后台的时候调用,所以要设置后台继续运行,则在这个函数中设置即可
- (void)applicationDidEnterBackground:(UIApplication *)application {
NSLog(@"5.applicationDidEnterBackground");
/**当程序进入后台时,需要做的事情
1.保存用户数据或者状态信息,所有没写到磁盘的文件或者信息,
在进入后台时,最后都要写入到磁盘中去,因为程序可能在后台被杀死。
2.释放尽可能多的内存
*/
/**
applicationDidEnterBackgound: 方法有大概5秒的时间让你完成这些任务。
如果超过时间还有未完成的任务,你的程序就会被终止而且从内存中清除。
如果还需要长时间的运行任务,可以调用
beginBackgroundTaskWithExpirationHandler方法,
去请求后台运行时间和启动线程来运行长时间运行的任务
*/
//申请backgroundTask,实现一个可以运行几分钟的权限
[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil];
/**应用程序在后台时的内存使用
1.在后台时,每个应用程序都应该释放最大的内存。
系统努力的保持更多的应用程序在后台同时运行。
不过当内存不足时,会终止一些挂起的程序来回收内存,那些内存最大的程序首先被终止。
2.事实上,应用程序应该的对象如果不再使用了,那就应该尽快的去掉强引用,这样编译器可以回收这些内存。
如果你想缓存一些对象提升程序的性能,你可以在进入后台时,把这些对象去掉强引用。
3.下面这样的对象应该尽快的去掉强引用:
(1)图片对象
(2)你可以重新加载的 大的视频或数据文件
(3)任何没用而且可以轻易创建的对象
4.在后台时,为了减少程序占用的内存,系统会自动在回收一些系统帮助你开辟的内存。比如:
系统回收Core Animation的后备存储。
去掉任何系统引用的缓存图片
去掉系统管理数据缓存强引用
*/
}
#pragma mark 当应用程序从后台将要重新回到前台的时候调用。
- (void)applicationWillEnterForeground:(UIApplication *)application {
NSLog(@"6.applicationWillEnterForeground");
}
#pragma mark 当程序将要退出时被调用,通常是用来保存数据和一些退出的清理工作。这个需要设置UIApplicationExitsOnSuspend的键值
- (void)applicationWillTerminate:(UIApplication *)application {
NSLog(@"7.applicationWillTerminate");
}
#pragma mark 当程序载入后执行
- (void)applicationDidFinishLaunching:(UIApplication *)application
{
NSLog(@"8.applicationDidFinishLaunching");
}
@end