美文网首页
iOS AppDelegate方法全解

iOS AppDelegate方法全解

作者: BetterComingDay | 来源:发表于2017-08-08 15:10 被阅读58次

    按照app启动的调用顺序来写。

    程序第一次启动只需要加载这两个方法

    1、初始化

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    

    2、程序变成激活状态

    - (void)applicationDidBecomeActive:(UIApplication *)application
    

    程序从前台进入后台

    1、即将进入前台

    - (void)applicationWillEnterForeground:(UIApplication *)application
    

    2、变成激活状态

    - (void)applicationDidBecomeActive:(UIApplication *)application
    

    程序从后台进入前台

    1、即将变成非激活状态

    - (void)applicationWillResignActive:(UIApplication *)application
    

    2、进入后台

    - (void)applicationDidEnterBackground:(UIApplication *)application
    

    程序在后台,双击home,上滑删除

    1、程序终止

    - (void)applicationWillTerminate:(UIApplication *)application
    

    程序在激活装态,双击home,上滑删除

    1、即将进入非激活状态

    - (void)applicationWillResignActive:(UIApplication *)application
    

    2、进入后台

    - (void)applicationDidEnterBackground:(UIApplication *)application
    

    3、程序终止

    - (void)applicationWillTerminate:(UIApplication *)application
    

    这里需要注意的是,正常程序退出之后,会在几秒内停止工作,要想申请更长的时间,需要用到beginBackgroundTaskWithExpirationHandlerendBackgroundTask这两个需要成对出现。
    下边这种写法会让程序多工作10分钟
    first在AppDelegate中增加属性

    @property (nonatomic, assign) UIBackgroundTaskIdentifier task;
    

    second在进入后台的代码中这样写

    - (void)applicationDidEnterBackground:(UIApplication *)application{
        UIApplication *app = [UIApplication sharedApplication];
        _task = [app beginBackgroundTaskWithExpirationHandler:^{
            //关闭后台时执行的代码
            /* task = UIBackgroundTaskInvalid; */
            [[UIApplication sharedApplication] endBackgroundTask:_task];
            _task = UIBackgroundTaskInvalid;
        }];
    }
    
    // 如果没到10分钟,也可以主动关闭后台任务,但这需要在主线程中执行,否则会出错
    dispatch_async(dispatch_get_main_queue(), ^{
        if (_task != UIBackgroundTaskInvalid)
           {
             // 和上面10分钟后执行的代码一样
            // if you don't call endBackgroundTask, the OS will exit your app.
             [application endBackgroundTask:_task];
            _task = UIBackgroundTaskInvalid;
          }
    });
    

    相关文章

      网友评论

          本文标题:iOS AppDelegate方法全解

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