应用生命周期
ios应用不同状态下彼此间的关系
1、Not Running(非运行状态)。 应用没有运行或者被系统终止 2、Inactive(前台非活动状态)。 应用正在进入前台状态,但是还不能接受时间处理
3、Active(前台活动状态)。 应用进入前台状态,能接受事件处理 4、Background(后台状态)。 进入后台后,仍然能够执行代码,如果可执行代码 就执行,没有可执行代码或者执行完毕,应用进入挂起状态 5、Suspended(挂起状态)。 不能执行代码,系统内存不够 应用会被终止
状态改变的过程中应用调用的方法:
#import "AppDelegate.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
//应用启动并进入初始化时调用该方法并发出通知,这个阶段会实例化根视图控制器
NSLog(@"didFinishLaunchingWithOptions");
return YES;
}
- (void)applicationWillResignActive:(UIApplication *)application {
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
//从活动状态进入非活动状态时调用该方法并发出通知,这个阶段可以保存ui的状态
NSLog(@"applicationWillResignActive");
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
//应用进入后台时调用该方法并发出通知,这个阶段可以保存用户数据,释放一些资源等
NSLog(@"applicationDidEnterBackground");
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
// Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
//应用进入到前台,但是没有出狱活动状态时调用该方法并发出通知,这个阶段可以恢复用户数据
NSLog(@"applicationWillEnterForeground");
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
//应用进入前台并处于活动状态时调用该方法并发出通知,这个阶段可以恢复ui的状态
NSLog(@"applicationDidBecomeActive");
}
- (void)applicationWillTerminate:(UIApplication *)application {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
//应用被终止时调用这个方法并发出通知,但内存清除时除外,这个阶段释放一些资源,也可以保存用户数据
NSLog(@"applicationDidBecomeActive");
}
@end
注:应用处于active状态时点击Home键或者有其它应用导致中断,该场景的状态改变过程可以分成两种情况:后台运行或者挂起、不可以在后台运行或者挂起。可以在info.plist中设置相关属性:Application does not run in background =Yes为禁止项目在后台运行,反之允许。 双击Home进入多任务栏,应用这时时进入后台运行或者挂起,也可能有处于终止。 应用在后台处理完成后进入挂起状态,如果内存不够用,该应用内存会被清除而终止。再次运行,上次的状态不会被保存,清除内存时不会调用任何方法或通知。