iO后台模式开发

1. 后台驻留

iOS 中所谓的「后台驻留」并不是指「执行中的程序」,而是「最近使用过的程序」
Apple 的知识库文章解释:
  • 按两下主画面按钮后,显示的是「最近用过的应用程序」,所以别把它想成Mac OS X 中的Command + Tab 键所显示的切换程序列。

  • 你可以试试看将iPhone 关机再开机,然后按两下 Home 键,应该会发现先前那些程式还是出现在那里,因为它其实是你最近使用过的程序使用记录,或像是浏览器中的浏览记录。

  • 如果你一个一个去清除 "后台驻留" 的程序,就像是一笔一笔删除浏览记录中的项目一样,是没有太大意义的(除非你不想让其他人看到你曾经用过什么程式,或者想杀时间、太无聊了),也不会对电力或记忆体有什么帮助。

  • iOS 的多任务处理其实是很聪明的,系统会自动中止在背景执行的程序,在有需要时,也会将被中止的程式 suspended(挂起)(注:"中止的程式"不是指关闭程序,而是指由前台转向后台的程序,程序在后台并不真正运行,不要和关闭程序混淆了) 从内存中移除。因此,iOS 装置的使用者根本就不需要担心怎么管理这些执行中或不在执行中的程序。

所以点击两下Home之后显示的是记录,并且这些记录是有的是挂起状态,也有应用因为内存吃紧而被关闭,当你将应用划出记录的时候,其实做的是两个操作。
  • 清除记录

  • 完全关闭应用(关闭进程)

2.挂起

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

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

调用UIApplication的
eginBackgroundTaskWithExpirationHandler

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

  • <p> 首先:声明一个实例 <p>
@interface AppDelegate ()  
{  
    //用来保存后台运行任务的标示符  
     UIBackgroundTaskIdentifier backgroundTask;  
}

</code> </pre>

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

4.无限后台运行

首先声明你需要的后台任务
在Info.plist中添加UIBackgroundModes键值,它包含一个或多个string的值,包括:
  • audio:在后台提供声音播放功能,包括音频流和播放视频时的声音
  • location:在后台可以保持用户的位置信息
  • voip:在后台使用VOIP功能

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

  • <p> 下面以后台播放音乐为例:</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];

最后贴出官方文档地址:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容