文档章节

iOS中后台运行

meilidashijie
 meilidashijie
发布于 2013/01/02 14:04
字数 1038
阅读 368
收藏 11

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

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

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

1
2
3
if(![UIDevicecurrentDevice].multitaskingSupported){
    //不支持多任务时应做的处理
}

2、基本多任务特性

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

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

1
2
3
4
5
6
- (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失活而停止播放。一般需要这么设置就可以了:

1
[[AVAudioSessionsharedInstance]setCategory:AVAudioSessionCategoryPlaybackerror: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。

本文转载自:http://blog.sina.cn/dpool/blog/ArtRead.php?nid=499c55c901013nlt&PHPSESSID=8439510dd62aa7b70190ee8...

meilidashijie
粉丝 14
博文 34
码字总数 16292
作品 0
海淀
私信 提问
iOS按钮倒计时在进入后台不继续计时的处理

iOS程序进入后台后十分钟之内就会被系统kill掉,我想要程序进入后台后仍然运行计时功能,怎么解决呢? 方法一:可以使用记录开始时间和获取当前时间的时间差进行处理 还是直接上代码: 下面的...

云上飞飞
2018/07/06
0
0
iOS 终于支持了 PWA,一起来认识一下这个强化版「小程序」 | 科普

iOS 终于支持了 PWA,一起来认识一下这个强化版「小程序」 | 科普 发布于 2018-04-13 文章被以下专栏收录

少数派
2018/07/06
0
0
iOS基础深入补完计划--NSURLSession使用详解(附Demo)

目录 前言 API Demo 前言 本文主要是把NSURLSession以及NSURLSessionTask相关的代理方法全部整理了一下。 旨在大体了解在一个iOS网络请求中、一个任务究竟经理了什么。 而我们、又能做些什么...

kirito_song
2018/05/10
0
0
软件架构杂谈(三) --- APNS

浅谈软件架构(三) —— APNS ----cnyinlinux 本文将讨论的是常见软件架构中的三角关系——APNS。 APNS是Apple Push Notification Service的简称,即苹果推送通知服务。它用在当前很火热的苹果...

cnyinlinux
2015/06/09
0
0
迈绝伦团队工作汇总

项目负责人:余志恒 up_java后台:无 mz_java后台:伦比商城后台功能,新增2个推送功能 bwk后台:无 项目负责人:季景胜 up_Android:无 upzg_Android:无 mzqk_Android:推送及秒币功能UI界...

风化的骆驼
2017/01/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

进程命令ps

命令ps 用途: 显示当前系统的进程状态 语法: ]# ps [选项] 常用选项: aux = 列出正在运行的所有进程; a 显示现行终端机下的所有程序,包括其他用户的程序 u 以用户为主...

迷失De挣扎
38分钟前
3
0
聊聊spring cloud的CachingSpringLoadBalancerFactory

序 本文主要研究一下spring cloud的CachingSpringLoadBalancerFactory CachingSpringLoadBalancerFactory spring-cloud-openfeign-core-2.2.0.M1-sources.jar!/org/springframework/cloud/o......

go4it
昨天
4
0
一篇文章搞定——JDK8中新增的StampedLock

一、StampedLock类简介 StampedLock类,在JDK1.8时引入,是对读写锁ReentrantReadWriteLock的增强,该类提供了一些功能,优化了读锁、写锁的访问,同时使读写锁之间可以互相转换,更细粒度控...

须臾之余
昨天
4
0
Android Camera原理之CameraDeviceCallbacks回调模块

在讲解《Android Camera原理之openCamera模块(二)》一文的时候提到了CameraDeviceCallbacks回调,当时没有详细展开,本文我们详细展开讲解一下。 CameraDeviceCallbacks生成过程: 《Android...

天王盖地虎626
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部