iOS后台模式BackgroundMode
概述
iOS平台提供给应用特殊的后台服务,应用在后台时仍被允许能执行一会。
后台模式
UIBackgroundModes Xcode Modes
1. audio -> Audio.Airplay and Picture in Picture: 应用在后台时可以播放声音信息 应用场景:需要在后台播放音频
2. location -> Location updates: 应用提供位置信息 应用场景:在后台时需要不断通知用户位置更新信息
3. voip -> Voice over IP: 提供Voice-over-IP服务。 如skype网络电话
4. fetch -> Background fetch: 应用场景:需不断地频繁的基于一定规律从网络上获取新的数据 supported in iOS 7.0
5. remote-notification 应用场景:通过远程推送作为一个信号表明有新的数据需要下载,以尽可能减少用户直接点开通知后查看内容的等待时间 supported in iOS7.0
6. newsstand-content 在后台时使用Newsstand框架(杂志)进行数据的下载更新 supported in iOS5.0 and later
7. external-accessory 有规律的从固件获取信息,可以在后台不断的与外设进行沟通 supported in iOS 5.0 and later
一些外设控制App,比如一些控制第三方MFi配件的应用,开启后可让应用不断的与外设进行沟通
8. bluetooth-central -> Uses Bluetooth LE accessories 需要在后台不断更新蓝牙状态 CoreBluetooth supported in iOS 5.0 and later
9. bluetooth-peripheral -> Acts as a Bluetooth LE accessory 需要在后台不断访问其他蓝牙设备获取数据 supported in iOS 6.0 and later
后台执行场景
官方为我们界定了 3 类后台执行任务的场景:
- Background Tasks:APP 在前台时启动某项任务,然后在未结束之前突然 切换到了后台,那么 APP 可以在切换回调里使用某些 API 来继续向系统请求一些时间来继续完成这个任务;完成之后通知系统,之后系统会将 APP 挂起;
- Downloading:在后台启动从网络下载文件的任务 – 对于文件下载,iOS 有专门的机制;
- Specific Backgournd Tasks:应用需要在后台一直执行代码;
Background Tasks
使用 API beginBackgroundTaskWithExpirationHandler来指定.执行过程中 APP 被切换到后台时,任务还没有完成,这个时间又会自动调整为一个时间片段(具体多少我没找到文档说明,都是说可以通过backgroundTimeRemaining 属性得到)。对于一个固定 task ,每次调用beginBackgroundTaskWithExpirationHandler,都会产生一个 token 值(UIBackgroundTaskIdentifier 实际是个整型),必须在任务执行结束时,调用 endBackgroundTask 并传递这个 token,来结束后台任务。另外,作为最佳实践,都应该传递一个 超时 handler,以防申请到的时间片段内,还是没能完成任务的话,做最后的清理和标注工作!如果不传的话,那么结果就是 iOS 直接 kill 掉你的APP
doc and code from : iOS 后台任务设计指导
// 在某处定义一个 token 变量
UIBackgroundTaskIdentifier _bgTaskToken;
// 进入后台 委派方法回调
- (void)applicationDidEnterBackground:(UIApplication *)application
{
_bgTaskToken = [application beginBackgroundTaskWithName:@"MyTask" expirationHandler:^{
// 时间到了,任务还没完成,只能清理
...
// 取消后台任务
[application endBackgroundTask:_bgTaskToken];
_bgTaskToken = UIBackgroundTaskInvalid;
}];
// 异步启动任务,这样不会阻塞 本委派方法回调
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// 巴拉巴拉,做自己的任务
...
// 任务在时间限制内结束啦,取消后台任务
[application endBackgroundTask:_bgTaskToken];
_bgTaskToken = UIBackgroundTaskInvalid;
});
}
Apple Doc
Tracking the User’s Location
有三种方式来实现 位置的访问:
- The significant-change location service(这也是官方推荐的方式)
- Foreground-only location services
- Background location services
The significant-change location service ,字面理解,就是只有位置有变化时才会发出通知,有人说这个时机是依据基站,切换了基站时,就会发出一次通知,所以频率会受基站的密度影响,所以市区更新频率会比郊区高。但好处 是这个服务不管你的 APP 是在前台还是后台,不管是否已经被挂起,或已经死掉了,他都会唤醒你的进程进行相应处理,所以应该是最省电的
Communicating with an External Accessory
外设设备有很多,比如一些心率监控器,会在必要的时候向手机推送数据。系统替 APP 监视这个连接,但有数据过来时,会唤醒 APP 进行处理,每次唤醒 APP 只有 10 S进行数据处理,如果10S不够,需要使用 beginBackgroundTaskWithExpirationHandler: 方法再申请一段时间进行处理;
【Note】:Apple 要求此类应用 需要提供一个 开启 和 关闭 连接的界面供用户使用;
Using Push Notifications to Initiate a Download
服务端推送的通知内容里加入 键值对 content-available = 1 ,那么 手机收到这个通知后,会自动启动 APP 到后台,或 唤醒(依旧保持后台执行),并回调 委托方法application:didReceiveRemoteNotification:fetchCompletionHandler:
Reference
App Programming Guide for iOS - Background Execution
iOS 后台任务设计指导
iOS后台模式BackgroundMode的更多相关文章
- 对iOS后台模式最多10分钟运行时间的进一步理解
在app进入后台时,系统初始默认是只有10s的处理时间,但如果10s不够,我们可以主动申请,网上流传最多的一个说法是10分钟. 但这种说法有个前提: 那就是iOS7之前,是这样 但从iOS7开始,我们 ...
- ios 后台模式
1.在后台可以继续播放音频 To play sound in the background, make sure to add the following to the Info.plist file ...
- 关于iOS后台模式
https://onevcat.com/2013/08/ios7-background-multitask/ http://zhidao.baidu.com/link?url=NUOMrLGB6Odr ...
- ios xmpp开发应用后台模式接收聊天信息处理方案
ios xmpp开发应用后台模式接收聊天信息 最近在使用xmppframwork来实现一个聊天应用,碰到了一个问题,应用进入后台以后,就接收不到消息了: 怎么样才能使应用被切到后台时,应用中的网络连接 ...
- iOS之本地推送(前台模式与后台模式)
#import "AppDelegate.h" #import "GlobalDefine.h" @interface AppDelegate () @end ...
- 关于iOS后台问题( 一 )(ios后台刷新,后台定位,后台下载,真后台)
关于iOS的后台,以下引用一些文段进行一下脑补,请同学们大致看一下,有个基础,原文出处 -------------------------------------------------------- ...
- iOS后台定位,实时向服务器发送最新位置
第一步,开启后台模式,选中定位,选择project --> capabilities-->Backgorund Modes --> Location updates 如图: Past ...
- iOS后台定位实现
iOS后台定位实现 (2013-01-24 16:43:12) 工作中碰到一个定位的应用场景:app需要在后台运行,实时上传用户地理位置. 苹果对iOS的规范性在提升了app的品质的同时也 ...
- ios 后台下载,断点续传总结
2018年12月05日 16:09:00 weixin_34101784 阅读数:5 https://blog.csdn.net/weixin_34101784/article/details/875 ...
随机推荐
- sql 导入数据库 出现乱码问题 解决办法 设置 --default-character-set=utf8
mysql -u root -p --default-character-set=utf8 use dbname source /root/newsdata.sql
- hdu5289(2015多校1)--Assignment(单调队列)
Assignment Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total ...
- ios NSAttributedString 具体解释
ios NSAttributedString 具体解释 NSAttributedString能够让我们使一个字符串显示的多样化,可是眼下到iOS 5为止,好像对它支持的不是非常好,由于显示起来不太方便 ...
- PHP读取excel(5)
如果数据量很大的时候,就需要用PHPExcel迭代器逐行读取,具体代码如下: <?php header("Content-Type:text/html;charset=utf-8&qu ...
- 这个捕鱼游戏制作的真心不错,原创音乐,AV动作,让人流连忘返啊呵呵
女生看完这篇文章后果断地命令男朋友打开电脑和手机 2014-10-10 茶娱饭后 本人纯屌丝宅男一名.专注游戏十年有余,玩过无数大大小小的游戏,对捕鱼游戏情有独钟.我不想说在捕鱼游戏方面有多专业 ...
- 技术发展晴雨表 细数CPU接口10年变迁
http://cpu.zol.com.cn/160/1602240_all.html#p1602240 本文导航 第1页:10年磨10剑 CPU发展突飞猛进 第2页:462与423对垒 开启CPU竞争 ...
- HTTP的上传文件实例分析
这个是http文件传输的一种格式,当时不知道这种格式,废弃. HTTP的上传文件实例分析 由于论坛不支持Word写文章发帖. 首先就是附件发送怎么搞,这个必须解决.论坛是php的.我用Chrome类浏 ...
- java设计模式----复合模式
复合模式:复合模式结合两个或以上的模式,组成一个解决方案,解决一再发生的一般性问题 要点: 1.MVC是复合模式,结合了观察者模式.策略模式和组合模式 2.模型使用观察者模式,以便观察者更新,同时保持 ...
- DCOS之Mesos-DNS介绍
DCOS的Mesos-DNS它主要提供域名解析服务,Mesos-DNS 在DCOS框架中支持服务发现,同意应用程序和服务通过域名系统(DNS)来相互定位.DCOS中的 Mesos-DNS充当的角色和在 ...
- 代码书写C++ 中调用传递与指针传递根本区别
从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变.而引用是一个别名,它在逻辑上不是独立的,它的存在具有依 ...