iOS在升级到4.0以后就支持了多任务了。下文将详细介绍一下这个特性。

1、检查设备是否支持多任务

Apple出于性能的考虑,并不是所有的iOS设备升级到iOS4以后都支持多任务,比如iPhone 3G。如果你的应用在没有多任务特性时会出问题,为了保持应用的健壮性,你应该对此进行判断并处理。你可以通过调用UIDevice对象的 multitaskingSupported属性来获取当前设备是否支持多任务。

if(![UIDevice currentDevice].multitaskingSupported){
//不支持多任务时应做的处理
}

2、基本多任务特性

通常,当用户按一下Home键,当前应用就会被进入后台,应用处在后台运行状态一小段时间后,就会进入挂起(suspend)状态,此时应用不会再执行任 何代码。如果系统在运行其他应用时内存资源不足,这个挂起的应用甚至有可能被系统退出,释放内存以供活动的应用使用。只有当用户再次运行此应用,应用才会 从挂起状态唤醒,代码得以继续执行。这就是iOS4带来的基本的多任务特性,这个特性是一般应用默认支持的,就是说你的应用不需要任何修改就能支持基本多 任务特性。

既然是多任务你应该会在应用进入后台时做一些处理,比如暂停一些界面的定时刷新或网络请求。同时,或者你会在程序进入前台时执行一些恢复操作。在你的应用的application delegate里有2个消息用于处理这些消息:

- (void)applicationDidEnterBackground:(UIApplication *)application {
//进入后台时要进行的处理
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
//进入前台时要进行的处理
}

当然你也许不会都在application delegate处理所有的事情。如果你要在其他对象中处理,那么你就需要注册系统通知了,这两个通知分别是 UIApplicationDidEnterBackgroundNotification和 UIApplicationWillEnterForegroundNotification。

也许你需要更多的多任务特性,比如后台播放音乐或者是后台进行GPS跟踪。这会是下面介绍的内容。

3、后台播放音

通常,一般应用在进入后台时,任何声音就将会停止。这也许不是我们所想要的。要想让自己的应用支持后台播放,首先要修改应用的Info.plist 文件,你需要在Info.plist文件中添加UIBackgroundModes字段,该字段的值是应用支持的所有后台模式,是一个数值类型。目前此数 组可以包含“audio”、“location”和“voip”这三个字符串常量,如果要支持后台音乐播放,你就需要包含“audio”,其余两个会将在 后面讲到。

同时,你也应该设置一下应用程序的Audio Sesstion。这个是必需的,如果不设置Audio Sesstion,应用就可能进入后台时Audio Sesstion失活而停止播放。一般需要这么设置就可以了:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];

4、后台GPS跟踪

和后台播放音乐类似,若要支持后台GPS跟踪,你就需要在Info.plist文件中UIBackgroundModes字段对应的数组中增加“location”字符串。

5、后台voip支持

由于voip应用需要一个长连接到服务器,为了让这类应用能正常工作,iOS中加入后台voip支持特性。为支持这一特性,需要在Info.plist文件中UIBackgroundModes字段对应的数组中增加“voip”字符串。

此外你仍然需要配置一下你的网络连接,以便支持后台连接。iOS提供的网络连接库有几种,下面一一说明:

如果你使用的是NSStream,如NSInputStream或NSOutputStream,需要调用setProperty:forKey:将 Key为NSStreamNetworkServiceType的value设置为NSStreamNetworkServiceTypeVoIP。

如果你使用NSURLRequest,需要调用setNetworkServiceType:将网络类型设置为NSURLNetworkServiceTypeVoIP。

如果你使用CFStream,如CFReadStreamRef或CFWriteStreamRef,需要调用 CFReadStreamSetProperty或CFWriteStreamSetProperty将 kCFStreamNetworkServiceType属性设置为kCFStreamNetworkServiceTypeVoIP。

最新文章

  1. Minor【 PHP框架】6.代理
  2. hashmap的底层实现
  3. ExtJs4 笔记(14) layout 布局
  4. [转]使用Sencha Ext JS 6打造通用应用程序
  5. eclipse配置javacv0.8
  6. Struts2返回json
  7. 【Better Code】repeat
  8. OAuth 2.0介绍学习
  9. 不可或缺的企业OA面临问题,以及解决建议 软件定制开发 森普演示平台
  10. No.26
  11. java中String类型的相关知识
  12. log4j之mybatis配置
  13. mysql加密解密方式用法
  14. 在git服务器上创建项目过程及遇到的问题
  15. spark基础---->spark的第一个程序
  16. 廖雪峰网站:学习python基础知识—list和tuple(二)
  17. django学习--1
  18. SQL Server排序规则不一致 - Collate Database_Default
  19. vs2013中,自定义mvc 添加视图脚手架
  20. SpringMVC @RequestBody 接收Json数组对象

热门文章

  1. VMware workstation 9.0中安装Windows server 2012 和 Hyper-v
  2. 9、JS对象 知识总结
  3. CSC.exe(C#编译器命令行)
  4. android抓取logcat日志的方法
  5. Java开发微信公众号(二)---开启开发者模式,接入微信公众平台开发
  6. 在数组中寻找出现次数大于N/K的数
  7. 树中两个结点的最低公共祖先--java
  8. 【bzoj3998】[TJOI2015]弦论 后缀自动机+dp
  9. 草摆动shader
  10. leetcode 27 水