IOSIOS面试裤

iO后台模式开发

2016-01-13  本文已影响204人  NGeLB

1. 后台驻留

iOS 中所谓的「后台驻留」并不是指「执行中的程序」,而是「最近使用过的程序」
Apple 的知识库文章解释:
所以点击两下Home之后显示的是记录,并且这些记录是有的是挂起状态,也有应用因为内存吃紧而被关闭,当你将应用划出记录的时候,其实做的是两个操作。

2.挂起

一般说来,所有程式进入背景后都还有1-5秒的执行缓冲时间(视内存压力而决定),有些程序可以要求延长到10 分钟(这些当然是由开发人员在设计与提交程式时决定和声明),因此,在你按下 Home 键后,本来的程式就会退到后台,如果它有额外的后台执行作业,超过10分钟还是会被 iOS 中止,但是,也有例外情况,某些特殊类型的程式是被容许在背景中持续执行的,像是会持续在背景播放音乐的程序、GPS 程序、VOIP 程序、Newsstand 以及周边配件附属的程序,不过只要这些程序不再执行动作,就会变成中止的程式,像是音乐拨完了、杂志下载完了。
既然是多任务你应该会在应用进入后台时做一些处理,比如暂停一些界面的定时刷新或网络请求。同时,或者你会在程序进入前台时执行一些恢复操作。
- (void)applicationDidEnterBackground:(UIApplication*)application
{
    //进入后台时要进行的处理 
}
- (void)applicationWillEnterForeground:(UIApplication*)application  
{  
    //进入前台时要进行的处理  
}  

3.延长程序挂起的时间(最多十分钟)

调用UIApplication的
eginBackgroundTaskWithExpirationHandler

方法,可以让 app 最多有10分钟的时间在后台长久运行

@interface AppDelegate ()  
{  
    //用来保存后台运行任务的标示符  
     UIBackgroundTaskIdentifier backgroundTask;  
}

</code> </pre>

- (void)applicationDidEnterBackground:(UIApplication *)application {
    //通知系统, 我们需要后台继续执行一些逻辑
    backgroundTask = [application beginBackgroundTaskWithExpirationHandler:^{
        //超过系统规定的后台运行时间, 则暂停后台逻辑
        [application endBackgroundTask:backgroundTask];
        backgroundTask = UIBackgroundTaskInvalid;
    }];
    //判断如果申请失败了, 返回
    if (backgroundTask == UIBackgroundTaskInvalid) {
        NSLog(@"beginground error");
        return;
    }
    //已经成功向系统争取了一些后台运行时间, 实现一些逻辑, 如网络处理
    //some code
}
[[UIApplication sharedApplication] endBackgroundTask:backgroundTask];
backgroundTask = UIBackgroundTaskInvalid;

4.无限后台运行

首先声明你需要的后台任务
在Info.plist中添加UIBackgroundModes键值,它包含一个或多个string的值,包括:

<p>前面的每个value让系统知道你的应用程序应该在适当的时候被唤醒。例如,一个应用程序,开始播放音乐,然后移动到后台仍然需要执行时间,以填补音频输出缓冲区。添加audio键用来告诉系统框架,需要继续播放音频,并且可以在合适的时间间隔下回调应用程序;如果应用程序不包括此项,任何音频播放在移到后台后将停止运行。</p>

<p>在Supporting Files目录下的【02 应用进入后台继续播放音乐-Info.plist】 增加一项【Required background modes】 值为【App plays audio or streams audio/video using AirPlay】<p>
iamge
// 后台播放, 
AVAudioSession * session = [AVAudioSession sharedInstance];
// 类型是:播放和录音
[session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
// 而且要激活 音频会话
[session setActive:YES error:nil];

最后贴出官方文档地址:

上一篇下一篇

猜你喜欢

热点阅读