App 运行状态
IOS中AppDelegate中的生命周期事件的调用条件:
//当应用程序将要进入非活动状态执行,在此期间,应用程序不接受消息或事件,比如来电
- (void)applicationWillResignActive:(UIApplication *)application
{
NSLog(@“应用程序将要进入非活动状态,即将进入后台”);
}
//应用程序已经进入后台运行
- (void)applicationDidEnterBackground:(UIApplication *)application
{
NSLog(@“如果应用程序支持后台运行,则应用程序已经进入后台运行”);
}
//应用程序将要进入活动状态执行
- (void)applicationWillEnterForeground:(UIApplication *)application
{
NSLog(@“应用程序将要进入活动状态,即将进入前台运行”);
}
//应用程序已经进入活动状态
- (void)applicationDidBecomeActive:(UIApplication *)application
{
NSLog(@“应用程序已进入前台,处于活动状态”);
}
//应用程序将要退出,通常用于保存书架喝一些推出前的清理工作,
- (void)applicationWillTerminate:(UIApplication *)application
{
NSLog(@“应用程序将要退出,通常用于保存书架喝一些推出前的清理工作”);
}
//当设备为应用程序分配了太多的内存,操作系统会终止应用程序的运行,在终止前会执行这个方法
//通常可以在这里进行内存清理工作,防止程序被终止
-(void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
NSLog(@“系统内存不足,需要进行清理工作”);
}
//当系统时间发生改变时执行
-(void)applicationSignificantTimeChange:(UIApplication *)application
{
NSLog(@“当系统时间发生改变时执行”);
}
//当程序载入后执行
-(void)applicationDidFinishLaunching:(UIApplication *)application
{
NSLog(@“当程序载入后执行”);
}
app 运行状态
typedef NS_ENUM(NSInteger, UIApplicationState) {
UIApplicationStateActive,
UIApplicationStateInactive,
UIApplicationStateBackground
} NS_ENUM_AVAILABLE_IOS(4_0);
当然,应用不在运行状态,不在考虑之列。只要应用运行起来了,存在以上三种状态。
1.UIApplicationStateActive
这个基本没什么疑问,应用在前台运行时就是这个状态。
2.UIApplicationStateInactive
待激活状。在应用运行状态下,可能引起这种状态的情况有
a.下接状态栏,看通知
b.双击home键,下面弹出任务运行栏
c.锁屏。应该程序也非后台状态。
3.UIApplicationStateBackground
应用在后台状。引起这种状态的情况有:
a.按home键
b.启动其它应用,把当前应用挤入后台。
iOS应用程序状态及互相切换
从这个示意图,我们可以看到哪些状态间是可以互相转化的。而在这些状态互相转化的同时,AppDelegate中对应的生命周期方法会被调用:
-
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions 进程启动但还没完成初始化,这个方法是iOS6之后才有的
-
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 进程启动基本完成
-
- (void)applicationWillResignActive:(UIApplication *)application 应用程序将要入非活动状态执行,在此期间,应用程序不接收消息或事件
-
- (void)applicationDidBecomeActive:(UIApplication *)application 应用程序入活动状态,这个刚好跟上面那个方法相反
-
- (void)applicationDidEnterBackground:(UIApplication *)application 程序被推送到后台,如果要设置后台继续运行,则在这个函数里面设置即可
-
- (void)applicationWillEnterForeground:(UIApplication *)application 程序从后台将要回到前台
-
- (void)applicationWillTerminate:(UIApplication *)application 程序将要退出