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: handler:^{
//执行你想要执行的任务,同时可以配合第一种任务,以增加某些同步方法的执行时间,比如说下载数据等
}];
AppDelegate的更多相关文章
- 谈谈AppDelegate
谈谈AppDelegate 前言 每个iOS程序都会有一个AppDelegate的类,这个类就是一个代理类,我们新建一个Project的时候,里面都会带有这个类.现在就让我们看看这个类. 开始介绍 对 ...
- cocos2d-x打飞机实例总结(一):程序入口分析和AppDelegate,Application,ApplicationProtocol三个类的分析
首先,是个敲代码的,基本上都知道程序的入口是main函数,显然,就算在cocos2d-x框架中也一样 我们看看main函数做了什么 #include "main.h" #inclu ...
- [MISS静IOS开发原创文摘]-AppDelegate存储全局变量和 NSUserDefaults standardUserDefaults 通过模型保存和读取数据,存储自定义的对象
由于app开发的需求,需要从api接口获得json格式数据并保存临时的 app的主题颜色 和 相关url 方案有很多种: 1, 通过AppDelegate保存为全局变量,再获取 2,使用NSUSerD ...
- Coding源码学习第一部分(AppDelegate.m)
前言:在此首先感谢开源,感谢大神们的无私分享. Coding 的主页:https://coding.net/app#app-feature Coding 自己家的仓库:https://coding.n ...
- cocos2dx 3.7中 AppDelegate.h的class TestController;这种写法的具体意思不太明白,只能猜是类似于外部定义的东西。
cocos2dx 3.7中 AppDelegate.h的class TestController;这种写法的具体意思不太明白,只能猜是类似于外部定义的东西.
- 应用程序代理AppDelegate解析
应用程序UIApplication是通过代理和外部交互的,当应用程序生命周期中发生改变时UIApplication就会调用代理对应的方法. @implementation AppDelegate - ...
- IOS应用程序生命周期的AppDelegate详解
IOS 中的 AppDelegate.m/h 文件是很重要的呢,因为它是对 Application 的整个生命周期进行管理的. 先明白,每个iPhone应用程序都有一个UIApplication,UI ...
- ios开发之AppDelegate
创建应用程序之后之后,默认有AppDelegate.h文件与AppDelegate.m文件. AppDelegate为何物? AppDelegate为整个应用的一个代理,提供程序启动.退出等类似 ...
- 【转】ios开发之AppDelegate
创建应用程序之后之后,默认有AppDelegate.h文件与AppDelegate.m文件. AppDelegate为何物? AppDelegate为整个应用的一个代理,提供程序启动.退出等类似 ...
随机推荐
- LightOJ1044 Palindrome Partitioning(区间DP+线性DP)
问题问的是最少可以把一个字符串分成几段,使每段都是回文串. 一开始想直接区间DP,dp[i][j]表示子串[i,j]的答案,不过字符串长度1000,100W个状态,一个状态从多个状态转移来的,转移的时 ...
- BZOJ3356 : [Usaco2004 Jan]禁闭围栏
首先将坐标离散化,考虑从左往右扫描线 碰到插入操作则插入 碰到删除操作的: 当前包含i的矩形数=y1在[1,y2[i]]之间的矩形数-y2在[1,y1[i]-1]之间的矩形数 用两棵树状数组维护即可, ...
- JavaScript中toStirng()与Object.prototype.toString.call()方法浅谈
toStirng()与Object.prototype.toString.call()方法浅谈 一.toString()是一个怎样的方法?它是能将某一个值转化为字符串的方法.然而它是如何将一个值从一种 ...
- 【BZOJ】2946: [Poi2000]公共串
http://www.lydsy.com/JudgeOnline/problem.php?id=2946 题意:给n个串,求最大公共子串.(1<=n<=5,每个串长度<=2000) ...
- 如何获取checkboxlist的多个选中项
string[] array = dt.Rows[0]["s_type"].ToString().Split('|'); foreach (ListI ...
- SQL Server 中的游标(cursor)
http://www.cnblogs.com/Dlonghow/archive/2009/05/14/1456910.html 在数据库中,游标是一个十分重要的概念.游标提供了一种对从表中检索出的数据 ...
- java---一元二次方程练习
public class wu{ public static void main(String[] args){ int a = 2,b = 1, c = 0,d = b*b-4*a*c if (a ...
- memcached与spring
key的生成规则 update 与 query 的参数不一样,如何让其生成一样的key 列表缓存如何定义key及失效 最近同事推荐了一个开源项目:Simple-Spring-Memcached(简称s ...
- 【转】我们应该如何去了解JavaScript引擎的工作原理
原文地址:http://www.nowamagic.net/librarys/veda/detail/1579 昨天收到一封来自深圳的一位前端童鞋的邮件,邮件内容如下(很抱歉,未经过他的允许,公开邮件 ...
- nginx 配置文件分析以及配置负载均衡器
修改Nginx核心配置文件nginx.conf # cat /usr/local/nginx/conf/nginx.conf user www www; worker_processes ; # 工作 ...