iOS多任务详解

iOS多任务
1 检查设备是否支持多任务 
通过UIDevice对象的multitaskingSupported属性来获取当前设备是否支持多任务
if(![UIDevice currentDevice].multitaskingSupported){
  // 不支持多任务时应该做的处理
}
2 基本多任务特性
通常当用户按下Home键,当前应用就会进入后台,应用程序在后台运行状态一小段时间,就会进入挂起状态,此时应用不会再执行任何代码。当系统在运行其他应用时内存资源不足,这个挂起的应用甚至有可能被系统退出,释放内存以供活动的应用使用,只有当用户再次运行此应用,应用才会从挂起状态唤醒,代码得以继续执行。这就是iOS4 带来的基本的多任务特性,这个特性一般应用默认支持

既然是多任务你应该会在应用进入后台时做一些处理,比如暂停一些界面的定时刷新或网络请求。同时,或者你会在程序进入前台时执行一些恢复操作。在你的应用application delegate里有2个消息用于处理这些消息
-(void)applicationDidEnterBackground:(UIApplication *)application{
 // 进入后台时要进行的处理
}
-(void)applicationWillEnterForeground:(UIApplication *)application{
 // 进入前台需要进行的处理
}
当然你也许不会都在application delegate处理事情。如果要在其他对象中处理,那么你需要注册系统通知,这两个通知分别是UIApplicationDidEnterBackgroundNotification 和UIApplicationWillEnterForegroundNotification

在被终止之前的任意时间 应用程序会调用beginBackgroundTaskWithExpirationHandler:方法让系统给出额外的时间来完成一些需要在后台长时间执行的任务
(UIApplication的backgroundTimeRemaining属性包含程序运行的总时间)。一般它的执行时间是应用程序转入到后台的600秒之内执行,超过600秒自动切 断。
Local Notification定时启动 应用程序可以预先安排时间执行local notifications 传递。

3  后台播放音乐
通常,一般应用在进入后台时,任何声音都会停止。要想让自己的应用支持后台播放,首先要修改应用的Info.plist文件,需要在Info.plist
文件中添加UIBackgroundModes字段,该字段的值是应用支持所有的后台模式,是一个数值类型。目前此数组可以包含 audio Location voip
这个三个字符串常量 。如果是支持后台音乐,就需要包含audio  
同时需要设置程序的Audio Session 不设置会使应用进入后台时Audio Session失活而停止播放
[[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属性设置为kCFStreamNetworkTypeVoIP

猜你喜欢

转载自blog.csdn.net/a_ss_a/article/details/38504843