一、基础知识

  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:^{//执行你想要执行的任务,同时可以配合第一种任务,以增加某些同步方法的执行时间,比如说下载数据等}];

转载于:https://www.cnblogs.com/eileenleung/p/3505413.html

AppDelegate相关推荐

  1. Swift - AppDelegate.swift类中默认方法的介绍

    项目创建后,AppDelegate类中默认带有如下几个方法,具体功能如下: 1,应用程序第一次运行时执行 这个方法只有在App第一次运行的时候被执行过一次,每次App从后台激活时都不会再执行该方法. ...

  2. 关于 AppDelegate 、UIApplication 简单的用法

    2019独角兽企业重金招聘Python工程师标准>>> 由于接触ios不久,虽然项目可以做,但是对于UIApplication.AppDelegate这几个概念不是很熟悉,今天早上总 ...

  3. APP启动原理,APPdelegate程序状态解析

    2019独角兽企业重金招聘Python工程师标准>>> 根据以上两张图片来看,app的启动过程如下: 1.打开app,调用main函数 2.main调用UIApplicationMa ...

  4. 项目中AppDelegate详解

    1.AppDelegate.h //模板默认引入程序需要使用"类"的框架,即UIKit.h头文件,使它包含在程序中 #import <UIKit/UIKit.h> // ...

  5. cocos2dx[3.2](5) ——入口类AppDelegate.cpp

    [唠叨] 入口类AppDelegate.cpp是游戏程序的入口. [AppDelegate.cpp] 这是游戏程序的入口,主要用于游戏程序的逻辑初始化,并创建运行程序的入口界面(即第一个游戏界面场景) ...

  6. 2 自己编写:AppDelegate,CCApplication,CCApplicationProtocol

    1 CCApplicationProtocol.h /* * CCApplicationProtocol.h * *  Created on: 2014年10月19日 *      Author: t ...

  7. iOS之深入解析AppDelegate重构

    一.Massive AppDelegate AppDelegate 是应用程序的根对象,它连接应用程序和系统,确保应用程序与系统以及其他应用程序正确的交互,通常被认为是每个 iOS 项目的核心.随着开 ...

  8. AppDelegate瘦身之服务化

    有没有觉得你的AppDelegate杂乱无章?代码几百行上千行?集成了无数的功能,如推送.埋点.日志统计.Crash统计等等,感觉AppDelegate无所不能. 来一段一般的AppDelegate代 ...

  9. AppDelegate的模块化+瘦身

    前言 关于iOS的模块化,要追溯到16年接触的BeeHive了,BeeHive将功能模块化,以module的形式进行构建,以performSelector:的形式进行module的事件响应,以prot ...

最新文章

  1. mysql mha官网下载_mysql MHA 及多主复制
  2. 计算代码重复率_了解了知网大学生论文查重原理,重复率想高于6%都难!
  3. 使用 Blazor 开发内部后台(三):登录
  4. iOS touch事件单击双击区分响应
  5. 【原】Redis事务管理
  6. Esxi自动化配置脚本
  7. cadnaa噪声分析测试软件,德国Cadna/A环境噪声模拟软件系统介绍
  8. python+opencv人脸识别(用耶鲁大学的Yale人脸库训练cnn)3
  9. 电力系统卫星时钟同步工作的重要性
  10. layui 表格表头最右侧多一列 解决办法
  11. PL/SQL用户指南与参考(第一章)
  12. js点击重置按钮重置表单
  13. [Copy] Netlink Socket
  14. macOS 中 Cornerstone 的Clean操作和终端的svn cleanup命令无效了怎么办?
  15. python IEEE OSA GOOGLE学术下载
  16. 仿腾讯手机管家快捷中心功能的实现方案
  17. 基于FPGA和STM32的相位差测量(含源码)
  18. PL2303HX在Windows 10下面不装安装驱动的解决办法(Code:10)
  19. 2019浙大计算机考研经验贴
  20. 揭秘:中国企业家十大顶级圈子

热门文章

  1. Websocket--- long loop--ajax轮询
  2. toString()和String.valueOf()的区别(转)
  3. cmd窗口快速定位到具体文件夹方法
  4. bzoj1084: [SCOI2005]最大子矩阵
  5. 一站式学习Wireshark(七):Statistics统计工具功能详解与应用
  6. android应用开发全程实录-实现甩动拨打和挂断电话
  7. 巧用apply让javascript函数仅执行一次
  8. Angular自学笔记(?)TemplateRef和ViewContainerRef
  9. 转发:Ajax动态画EChart图表
  10. iOS:转载:IOS谓词--NSPredicate