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。

iOS中后台运行的更多相关文章

  1. ios程序后台运行设置(不是太懂)

    文一 我从苹果文档中得知,一般的应用在进入后台的时候可以获取一定时间来运行相关任务,也就是说可以在后台运行一小段时间. 还有三种类型的可以运行在后以, 1.音乐 2.location 3.voip 文 ...

  2. [ios]app后台运行

    参考:http://www.douban.com/note/375127736/ 1 使用开源代码MMPDeepSleepPreventer将文件加入工程,包括音频文件.可以在源文件中加入单例,便于使 ...

  3. 【blog】SpringBoot的可执行文件如何在Linux中后台运行(待补充...)

    参考链接 linux下利用nohup后台运行jar文件包程序:http://blog.csdn.net/tang9140/article/details/38899345

  4. IOS微信后台运行时候倒计时暂停问题

    链接:https://pan.baidu.com/s/1i7cSkqL 密码:g80i 最近给央视做了个H5答题游戏,但在倒计时上遇到一个终端问题:手机端按Home键将微信收入后台之后,IOS11 会 ...

  5. IOS App 后台运行

    使用block的另一个用处是可以让程序在后台较长久的运行.在以前,当app被按home键退出后,app仅有最多5秒钟的时候做一些保存或清理资源的工作.但是应用可以调用UIApplication的beg ...

  6. iOS 和 Android 中的后台运行问题

    后台机制的不同,算是iOS 和 Android的一大区别了,最近发布的iOS7又对后台处理做了一定的更改,找时间总结一下编码上的区别,先做个记录. 先看看iOS的把,首先需要仔细阅读一下Apple的官 ...

  7. iOS开发小技巧--iOS程序进入后台运行的实现

    iOS程序进入后台运行的实现 视频中看到老师用的iOS7,代码中有开启timer,无限请求数据的功能,但是切换到后台,代码就不打印了 自己用的iOS9,进入后台还是可以打印的,再次进入前台也可以正常运 ...

  8. iOS 后台运行 类型

    iOS后台运行,需要有特定的类型才可以进行.这些内容并不是一直不变的,苹果也在逐步的更新这些内容. 本文内容是2015年11月03日时苹果支持的后台运行类型. 这是官方连接地址 其中较为重要的是下面这 ...

  9. iOS后台运行

    http://www.cocoachina.com/bbs/read.php?tid=149564 文一 我从苹果文档中得知,一般的应用在进入后台的时候可以获取一定时间来运行相关任务,也就是说可以在后 ...

随机推荐

  1. R语言分析朝阳医院数据

    R语言分析朝阳医院数据 本次实践通过分析朝阳医院2016年销售数据,得出“月均消费次数”.“月均消费金额”.“客单价”.“消费趋势”等结果,并据此作出可视化图形. 一.读取数据: library(op ...

  2. IOS开发---菜鸟学习之路--(十六)-将Image转换为Base64

    我们直接在.m文件的引用头文件部分 和 @interface   AddPictureViewController () 之间  加入 增加部分的代码 然后就可以使用图片转Base64了 #impor ...

  3. 55、android app借助友盟实现微信授权登录

    一.去微信开放平台的管理中心申请移动设备的审核(需进行开发者资质认证,每年300元) 1.获取应用的签名 2.在微信开放平台申请移动应用 两个注意点:①签名要填对 ②应用的包名要写对(tips: co ...

  4. 如何部署安装软件:vs2010 'VS' Inno Setup

    一直以来就是调试程序,生成的文件在debug或者release下,当没有其他资源文件时,这些程序也不用打包,直接就能够运行,但是程序中总会有一些额外的资源文件,视频啊,图片啊.这些需要打包在一个安装文 ...

  5. linux常用命令与系统管理常用命令

    linux命令:切换用户:开启ftp服务:service vsftpd start 开启ssh服务:service sshd start普通用户切换到超级用户:su rootlogout:(注销)un ...

  6. redis设置最大内存上限对置换策略的解读

    现在很少服务器还在使用32位的操作系统了,所以服务器的内存可以接近极限2^64的字节.redis配置文件中有限制最大内存的字段maxmemory,当redis的key达到最大值时,redis会有多种策 ...

  7. CSS查缺补漏篇

    前面的话:关于CSS,之前我已经做过一些基础的知识点介绍.CSS主要是用来给页面设置样式的,一般说来,在一个网站中,CSS应该独立封装在一个单独的.css外部文件中.样式的设置总体来说是不难的,但是需 ...

  8. Java Socket实战之三 传输对象

    首先需要一个普通的对象类,由于需要序列化这个对象以便在网络上传输,所以实现java.io.Serializable接口就是必不可少的了,入下: public class User implements ...

  9. HDU 5884 Sort(二分答案+计算WPL的技巧)

    Sort Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  10. [luogu2044][NOI2012] 随机数生成器 [矩阵快速幂]

    题面: 传送门 思路: 看一眼这个公式: $x\left[n+1\right]=\left(a\ast x\left[n\right]+c\right) mod m$ 递推,数据范围$n\leq 10 ...