zoukankan      html  css  js  c++  java
  • AppDelegate

    一、基础知识

      1) main.m指定了程序的入口点

    UIApplicationMain(argc, argv,nil,NSStringFromClass([StartingPointAppDelegateclass]));

      2) AppDelegate的入口点

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

      3) 前台和后台程序切换执行方法

    - (void)applicationWillEnterForeground:(UIApplication *)application {}
    程序将置于前台,程序启动的时候不会相应此方法,而是按下home以后再次回复程序的时候响应。
    - (void)applicationDidBecomeActive:(UIApplication *)application {} 程序已经置于前台,程序刚启动也会响应此方法。按下home以后再次回来也会响应。
    - (void)applicationWillResignActive:(UIApplication *)application {} 程序将要退出后台,按下home以后,程序不会立即消失,系统会先调用此方法。
    - (void)applicationDidEnterBackground:(UIApplication *)application {} 程序已经置于后台了,按home以后,程序完全消失会调用。

    二、程序后台运行

      1)在没有使用GCD时,当app被按home键退出后,app仅有最多5秒钟的时候做一些保存或清理资源的工作。但是在使用GCD后,app最多有10分钟的时间在后台长久运行。这个时间可以用来做清理本地缓存,发送统计数据等工作。

      注意:
          当多程序切换的时候,程序不会被关闭,在系统规定的一段时间内可以正常执行。
          当一个程序使用的内存太大,而导致系统内存不足的时候,程序会被关闭,任务会终止,直到下次启动程序,并退到后台的时候,后台任务才会重新执行。
          运行的条件必须在软件不被关闭的情况下可用。

    // AppDelegate.h
     @property (assign, nonatomic) UIBackgroundTaskIdentifier* backgroundTaskIdentifier;
    
    // AppDelegate.m
    
    - (void)applicationDidEnterBackground:(UIApplication *)application {
        [self beingBackgroundUpdateTask];
        NSLog(@"加上你需要多久运行的代码"); 
        NSLog(@"剩余执行时间: %f", [[UIApplication sharedApplication] backgroundTimeRemaining]);
        [self endBackgroundUpdateTask];
    }
    
    
    -(void) beingBackgroundUpdateTask {
        self.backgroundTaskIdentifier = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
            [self endBackgroundUpdateTask];
        }];
    }
    
    -(void) endBackgroundUpdateTask {
        [[UIApplication sharedApplication] endBackgroundTask: self.backgroundTaskIdentifier];
        self.backgroundTaskIdentifier = UIBackgroundTaskInvalid;
    
    }

      2) 每隔一段时间,系统自动执行的任务(设置的值必须大于等于600)

        注意:
           当多程序切换的时候,此任务也会被关闭。
             运行的条件必须在软件不被关闭的情况下可用

        执行的必要条件:
            找到程序的 plist 配置文件,增加:
            键:UIBackgroundModes 类型:Array
            在 Item0 里面设置类型:String,值:voip

    [[UIApplication sharedApplication] setKeepAliveTimeout:600 handler:^{
            //执行你想要执行的任务,同时可以配合第一种任务,以增加某些同步方法的执行时间,比如说下载数据等
        }];

     

     

  • 相关阅读:
    [LeetCode] Most Profit Assigning Work 安排最大利润的工作
    [LeetCode] Friends Of Appropriate Ages 适合年龄段的朋友
    [LeetCode] Goat Latin 山羊拉丁文
    [LeetCode] Binary Trees With Factors 带因子的二叉树
    [LeetCode] Card Flipping Game 翻卡片游戏
    [AWS] Nginx Started but not Serving AWS上Nginx服务器无法正常工作
    [LeetCode] Shortest Distance to a Character 到字符的最短距离
    [LeetCode] Short Encoding of Words 单词集的短编码
    [LeetCode] Most Common Word 最常见的单词
    Solve Error: MissingSchemaError: Schema hasn't been registered for model "YourModel".
  • 原文地址:https://www.cnblogs.com/eileenleung/p/3505413.html
Copyright © 2011-2022 走看看