美文网首页
AppDelegate生命周期

AppDelegate生命周期

作者: 求长生 | 来源:发表于2019-11-26 11:53 被阅读0次

    import “AppDelegate.h”

    >> app 启动完成 程序准备开始运行
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { }
    
    >> app 进入前台
    - (void)applicationWillEnterForeground:(UIApplication *)application {   }
    
    >> app 进入活跃状态
    - (void)applicationDidBecomeActive:(UIApplication *)application {   }
    
    << app 进入非活跃状态 如:打开状态栏 来电话等等,只会调用此方法。不会调用进入后台
    - (void)applicationWillResignActive:(UIApplication *)application {   }
    
    << app 进入后台 会调用 (app 进入非活跃状态)的方法
    - (void)applicationDidEnterBackground:(UIApplication *)application {   }
    
    << app 即将推出
    - (void)applicationWillTerminate:(UIApplication *)application {   }
    

    添加通知

    app进入活跃状态
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationBecomeActive) name:UIApplicationDidBecomeActiveNotification object:nil];
    // app进入非活跃状态
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillResignActive) name:UIApplicationWillResignActiveNotification object:nil];
    // app进入前台
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillEnterForeground) name:UIApplicationWillEnterForegroundNotification object:nil];
    // app进入后台
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidEnterBackground) name: UIApplicationDidEnterBackgroundNotification object:nil];

    程序调用顺序

    程序启动调用顺序:

    1.app 启动完成 程序准备开始运行
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    2.app 进入活跃状态
    - (void)applicationDidBecomeActive:(UIApplication *)application

    打开状态栏调用顺序

    1.app 进入非活跃状态

    关闭状态栏调用顺序

    1.app 进入活跃状态 「 有延迟 大约1s 」

    进入后台调用顺序 --> 点击Home键

    1.app 进入非活跃状态
    - (void)applicationWillResignActive:(UIApplication *)application
    2.app 进入后台
    - (void)applicationDidEnterBackground:(UIApplication *)application

    进入前台调用顺序

    1.app 进入前台
    - (void)applicationWillEnterForeground:(UIApplication *)application
    2.app 进入活跃状态
    - (void)applicationDidBecomeActive:(UIApplication *)application

    双击Home键盘

    1.app 进入非活跃状态
    - (void)applicationWillResignActive:(UIApplication *)application

    杀死app

    1.app 进入非活跃状态
    - (void)applicationWillResignActive:(UIApplication *)application
    2.app 进入后台
    - (void)applicationDidEnterBackground:(UIApplication *)application
    3.app 即将推出
    - (void)applicationWillTerminate:(UIApplication *)application

    AppDelegate流程

    AppDelegate流程图.png
    1.程序入口

    进入main函数,设置AppDelegate为代理

    int main(int argc, char * argv[]) {
    @autoreleasepool {
    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
    }

    原型:
    UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);

    principalClassName (主要类名) 和 delegateClassName (委托类名)。

    (1) 如果principalClassName是nil,那么它的值将从Info.plist去获取,如果Info.plist没有,则默认为UIApplication。principalClass这个类除了管理整个程序的生命周期之外什么都不做,它只负责监听事件然后交给delegateClass去做。

    (2) delegateClass 将在工程新建时实例化一个对象。NSStringFromClass([AppDelegate class])

    2.程序完成加载

    [AppDelegate application:didFinishLaunchingWithOptions:]

    3.创建UIWindows

    @property (strong, nonatomic) UIWindow *window;//AppDelete.h自带的属性

    4.程序被激活

    [AppDelegate applicationDidBecomeActive:]

    5.调用程序

    安上述程序调用顺序调用程序

    6.点击home键(模拟器点击command+shit+h时,手机相当于home键)

    1.程序取消激活状态
    [AppDelegate applicationWillResignActive:];
    //一种是即将进入后台状态会调用此方法,还有可能是当有电话进来或短信进来或锁屏等情况下,这时应用程序挂起进入非活动状态,也就是手机界面还是显示着你当前的应用程序的窗口,只不过被别的任务强制占用了,

    2.程序进入后台
    [AppDelegate applicationDidEnterBackground:];
    //指当前窗口不是你的App,大多数程序进入这个后台会在这个状态上停留一会,时间到之后会进入挂起状态(Suspended)。如果你程序特殊处理后可以长期处于后台状态也可以运行。

    3.Suspended (挂起):
    程序在后台不能执行代码。系统会自动把程序变成这个状态而且不会发出通知。当挂起时,程序还是停留在内存中的,当系统内存低时,系统就把挂起的程序清除掉,为前台程序提供更多的内存。

    7.点击app进入再次程序

    程序即将进入前台
    [AppDelegate applicationWillEnterForeground:]
    程序被激活
    [AppDelegate applicationDidBecomeActive:];

    ===============================================
    https://www.jianshu.com/p/01bcf1d2b5c1

    相关文章

      网友评论

          本文标题:AppDelegate生命周期

          本文链接:https://www.haomeiwen.com/subject/zdeqwctx.html