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

Declaration

SWIFT

typealias UIBackgroundTaskIdentifier = Int

OBJECTIVE-C

typedef NSUInteger UIBackgroundTaskIdentifier;

Import Statement

OBJECTIVE-C

@import UIKit;

SWIFT

import UIKit

Availability

Available in iOS 4.0 and later.

代码例子:

- (void)applicationDidEnterBackground:(UIApplication *)application {

__block UIBackgroundTaskIdentifier bgTask;

bgTask = [application beginBackgroundTaskWithExpirationHandler:^{

dispatch_async(dispatch_get_main_queue(), ^{

if (bgTask != UIBackgroundTaskInvalid)

{

bgTask = UIBackgroundTaskInvalid;

}

});

}];

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

dispatch_async(dispatch_get_main_queue(), ^{

NSLog(@"555555");

});

});

}

代码例子:

后台播放音乐

+ (UIBackgroundTaskIdentifier)backgroundPlayerID:(UIBackgroundTaskIdentifier)backTaskId

{

// 1. 设置并激活音频会话类别

AVAudioSession *session = [AVAudioSession sharedInstance];

[session AVAudioSessionCategoryPlayback error:nil];

[session setActive:YES error:nil];

// 2. 允许应用程序接收远程控制

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

// 3. 设置后台任务ID

UIBackgroundTaskIdentifier newTaskId = UIBackgroundTaskInvalid;

newTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil];

if (newTaskId != UIBackgroundTaskInvalid && backTaskId != UIBackgroundTaskInvalid) {

[[UIApplication sharedApplication] endBackgroundTask:backTaskId];

}

return newTaskId;

}

代码例子:
 

最新文章

  1. Css3阴影实例
  2. jqGrid的autoencode参数设置为true在客户端可能引发的编码问题
  3. Eclipse导入项目出现红色叹号的解决方法
  4. vijos P1915 解方程 加强版
  5. Java Web学习笔记3
  6. Hibernate管理Session和批量操作
  7. 按需讲解之Supervisor
  8. 利用column-width属性设置多栏布局
  9. javascript的调试
  10. 应用之间进行跳转,ComponentName的方式
  11. Bind和Eval的区别详解
  12. Qt Creator(编译器MinGW)中使用__attribute__(packed)的问题
  13. ANT property三种使用方式
  14. thinkphp添加数据 add()方法
  15. c++语言的设计和演化---在线函数
  16. ArcGIS AddIN开发之 设置当前工具为Edit Tool
  17. DBMS_NETWORK_ACL_ADMIN (OCP 053 第七题)
  18. Java 猜字谜游戏
  19. JavaScript变量作用域(Variable Scope)和闭包(closure)的基础知识
  20. python各种模块,迭代器,生成器

热门文章

  1. Python 缓冲区
  2. 032 HDFS中高可用性HA的讲解
  3. 求链表的倒数第m个元素
  4. python爬虫积累(一)--------selenium+python+PhantomJS的使用
  5. POJ 3660 Cow Contest. (传递闭包)【Floyd】
  6. 爬虫之Resquests模块的使用(二)
  7. lintcode 最大子数组III
  8. anaconda虚拟环境管理,从此Python版本不用愁
  9. 爬虫scrapy的使用
  10. centos6.9 忘记密码解决方法