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:^{//执行你想要执行的任务,同时可以配合第一种任务,以增加某些同步方法的执行时间,比如说下载数据等}];
转载于:https://www.cnblogs.com/eileenleung/p/3505413.html
AppDelegate相关推荐
- Swift - AppDelegate.swift类中默认方法的介绍
项目创建后,AppDelegate类中默认带有如下几个方法,具体功能如下: 1,应用程序第一次运行时执行 这个方法只有在App第一次运行的时候被执行过一次,每次App从后台激活时都不会再执行该方法. ...
- 关于 AppDelegate 、UIApplication 简单的用法
2019独角兽企业重金招聘Python工程师标准>>> 由于接触ios不久,虽然项目可以做,但是对于UIApplication.AppDelegate这几个概念不是很熟悉,今天早上总 ...
- APP启动原理,APPdelegate程序状态解析
2019独角兽企业重金招聘Python工程师标准>>> 根据以上两张图片来看,app的启动过程如下: 1.打开app,调用main函数 2.main调用UIApplicationMa ...
- 项目中AppDelegate详解
1.AppDelegate.h //模板默认引入程序需要使用"类"的框架,即UIKit.h头文件,使它包含在程序中 #import <UIKit/UIKit.h> // ...
- cocos2dx[3.2](5) ——入口类AppDelegate.cpp
[唠叨] 入口类AppDelegate.cpp是游戏程序的入口. [AppDelegate.cpp] 这是游戏程序的入口,主要用于游戏程序的逻辑初始化,并创建运行程序的入口界面(即第一个游戏界面场景) ...
- 2 自己编写:AppDelegate,CCApplication,CCApplicationProtocol
1 CCApplicationProtocol.h /* * CCApplicationProtocol.h * * Created on: 2014年10月19日 * Author: t ...
- iOS之深入解析AppDelegate重构
一.Massive AppDelegate AppDelegate 是应用程序的根对象,它连接应用程序和系统,确保应用程序与系统以及其他应用程序正确的交互,通常被认为是每个 iOS 项目的核心.随着开 ...
- AppDelegate瘦身之服务化
有没有觉得你的AppDelegate杂乱无章?代码几百行上千行?集成了无数的功能,如推送.埋点.日志统计.Crash统计等等,感觉AppDelegate无所不能. 来一段一般的AppDelegate代 ...
- AppDelegate的模块化+瘦身
前言 关于iOS的模块化,要追溯到16年接触的BeeHive了,BeeHive将功能模块化,以module的形式进行构建,以performSelector:的形式进行module的事件响应,以prot ...
最新文章
- mysql mha官网下载_mysql MHA 及多主复制
- 计算代码重复率_了解了知网大学生论文查重原理,重复率想高于6%都难!
- 使用 Blazor 开发内部后台(三):登录
- iOS touch事件单击双击区分响应
- 【原】Redis事务管理
- Esxi自动化配置脚本
- cadnaa噪声分析测试软件,德国Cadna/A环境噪声模拟软件系统介绍
- python+opencv人脸识别(用耶鲁大学的Yale人脸库训练cnn)3
- 电力系统卫星时钟同步工作的重要性
- layui 表格表头最右侧多一列 解决办法
- PL/SQL用户指南与参考(第一章)
- js点击重置按钮重置表单
- [Copy] Netlink Socket
- macOS 中 Cornerstone 的Clean操作和终端的svn cleanup命令无效了怎么办?
- python IEEE OSA GOOGLE学术下载
- 仿腾讯手机管家快捷中心功能的实现方案
- 基于FPGA和STM32的相位差测量(含源码)
- PL2303HX在Windows 10下面不装安装驱动的解决办法(Code:10)
- 2019浙大计算机考研经验贴
- 揭秘:中国企业家十大顶级圈子
热门文章
- Websocket--- long loop--ajax轮询
- toString()和String.valueOf()的区别(转)
- cmd窗口快速定位到具体文件夹方法
- bzoj1084: [SCOI2005]最大子矩阵
- 一站式学习Wireshark(七):Statistics统计工具功能详解与应用
- android应用开发全程实录-实现甩动拨打和挂断电话
- 巧用apply让javascript函数仅执行一次
- Angular自学笔记(?)TemplateRef和ViewContainerRef
- 转发:Ajax动态画EChart图表
- iOS:转载:IOS谓词--NSPredicate