关于iOS的后台,如下引用一些文段进行一下脑补,请同窗们大体看一下,有个基础,原文出处html
-----------------------------------------------------------------------------------------------ios
OS 7中,实际上APP拥有四种后台模式,不管是哪种后台机制,均须要利用苹果给予的相应后台接口实现。IOS7系统中,开发者能够灵活利用多种后台接口(API)实现更加智能的应用操做。
一,无后台仅推送
第 一种后台方式为传统的无后台操做,仅有苹果推送机制,这种方式出如今iOS 3.x如下的大部分系统版本上。这个方式下,应用在按下Home键后即会关闭退出,其数据经过苹果搭建的推送服务器传输,并不须要应用后台运行。这种方式 不太好的缘由在于,每次推出后,从新进入均须要从新加载,虽然推送可以统一解决数据和信息的传输,但遇到须要频繁进入应用(如聊天APP)的时候便会显得 体验很差。
二,墓碑式
第二种方式为墓碑式的后台机制,这在iOS 4后被大量采用,也就是人们所说的伪多任务。这方式相比较第一种改进的地方在于,按下Home键至主界面后,应用随即进入后台,但其被冻结,并不能进行任何操做。
三,智能调度后台
第三种为系统智能调度的后台,iOS 7新增的background fetch, 这个后台接口在苹果WWDC 2013上有说起,其会根据用户行为自动调整达到效率最优的后台模式,可以处理不是颇有时效性的信息获取。例如一些社交、新闻类的应用的后台信息更 新,iOS系统便会根据应用启动频率、时间和当前网络和电量的情况来智能分配每一个应用的后台获取频率和启动时长。
因为拥有该接口的应用的数据后台 刷新操做是统一调度的,所以系统能够在一个进程里面得到多个应用的数据,相似统一的推送机制,这样就可以最大限度地省电。 不过这个方式也有一个缺点,那即是开发者不能设定数据具体何时更新,所以这个后台方式只能应用在一些时效性和敏感度不高的地方。
四,真后台
第四种方式即是真后台机制,但iOS的真后台与Android的后台机制是不同的,为了兼顾系统体验和统一进程管理,iOS在这上面加入了众多的限制。大体拥有如下几个后台接口模式:
一、Background Audio,这是后台的音频,这个很早以前便有,也是iOS设备中用得最多的后台应用,调用这个接口能够实现后台的音乐播放。
二、Location Services,这是后台的定位,系统会拥有统一页面进行管理。
三、VoIP,后台语音服务,相似Skype通话应用须要调用,可进行后台的语音通话。
四、Newsstand,报刊杂志后台自动下载更新,其可以自动实时更新。
五、 Background Task Completion,这个接口早在iOS 4时候便拥有,其能够供任意类型的APP使用,不过在旧系统中,这个接口的后台限制运行时间仅为10分钟,意味着当应用退至后台,其后台运行仅能持续10 分钟便会转至休眠状态。iOS 7中对这个接口做出了改变,原来的为连续10分钟,即不论你这10分钟内用户是否关闭屏幕进入休眠状态,应用仍然会在后台等待10分钟完结后推出,而新的 改进为假如遇到关闭屏幕休眠的状况,这后台运行的10分钟便会跟随一同休眠,剩余的后台时间将会留待用户再一次唤醒设备才计算。这样后台运行的时间仍然为 10分钟,但并不连续,这样作的优势为省电。
如如今有一些词典应用带有后台复制选词功能,实际上其是利用了这个接口,若是用户开启词典后并推出,即便屏幕关闭,但词典仍然在后台运行,电量消耗仍是比较大的,在iOS 7上,这个问题能够获得解决。
六、 Remote Notification,这是本次较大的一个改进接口,以往聊天类应用接受推送后点进去须要再收一次信息,这状况在QQ、微信等应用上最为明显。不过拥 有了这个接口后,这状况将不复存在,之后推送将可以直接启动后台任务。值得注意的是remote notification支持silent notification(静默推送),这样dropbox这类同步应用能够在后台以最节能的模式实时静默同步了,相似布卡漫画这种也能够推送正在追的漫 画的新章节并在后台静默下载,待到下载好再给用户发送一个本地推送,用户点开即看无需再联网
七、Background Transfer Service,后台上传下载。iOS最接近传统多任务的后台接口,可供任意类型的app调用,无时间限制。应用场景包括后台上传和下载数据,这使得游戏 后台更新数据包,后台上传视频等等都成为可能,可是正如其名字,它只能用于处理上传下载这种传输类的任务,相似后台剪切板监控这种它就无能为力了。服务器
--------------------------------------------------------------------------------------------------------------------------------微信
如下介绍一下实际操做网络
首先咱们在工程中选择Gapability,找到back ground mode,如图多线程
咱们拿location updates刷新来举例app
当咱们初始化CLLocationmanager以后,须要额外添加这样一句代码函数
self.manger.pausesLocationUpdatesAutomatically = NO; //该模式是抵抗ios在后台杀死程序设置,iOS会根据当前手机使用情况会自动关闭某些应用程序的后台刷新,该语句申明不可以被暂停,可是不必定iOS系统在性能不佳的状况下强制结束应用刷新
通过测试,CLLocationmanager协议方法能在后台一直被调用,此时App是比较耗电的,若是后台拥有其余处理和运算的需求,最好将位置更新触发的操做进行多线程处理,最好是多线程排队处理。还有一种方法就是在AppDelegate中的生命周期函数里,在即将进入后台的时候将CLLocationmanager的阀值下降,比方说原来监测的米级别,能够下降成公里级别性能
if ([CLLocationManager significantLocationChangeMonitoringAvailable]) { [[mapCenter manager] stopUpdatingLocation]; [[mapCenter manage ] startMonitoringSignificantLocationChanges]; } else { NSLog(@"Significant location change monitoring is not available."); }
在applicationDidBecomeActive 中加入 测试
if ([CLLocationManager significantLocationChangeMonitoringAvailable]) { [[mapCenter manager] stopMonitoringSignificantLocationChanges]; [[mapCenter manager] startUpdatingLocation]; } else { NSLog(@"Significant location change monitoring is not available."); }