1.先说说iOS 应用程序5个状态:
停止运行-应用程序已经终止,或者还未启动。
不活动-应用程序处于前台但不再接收事件(例如,用户在app处于活动时锁住了设备)。
活动-app处于“使用中”的状态。
后台-app不在屏幕上显示,但它仍然执行代码。
挂起-app仍然驻留内存但不再执行代码。
按下Home键时,app从活动状态转入后台,绝大部分app通常在180秒内就从后台变成了挂起。
在内存吃紧的时候,iPhone会首先关闭那些挂起的app。
现在的iOS系统,都会在你按下Home键时,app从活动状态转入后台,绝大部分app通常在300秒内就从后台变成了挂起;
2.如果想要无限制的后台运行,那就需要自己向iOS系统申请app后台运行。
现在的iOS系统可以申请后台运行的api为:
后台运行api3、iOS为了让设备尽量省电,减少不必要的开销,保持系统流畅,因而对后台机制采用墓碑式的“假后台”。除了系统官方极少数程序可以真后台,一般开发者开发出来的应用程序后台受到以下限制:
1.用户按Home之后,App转入后台进行运行,此时拥有180s后台时间(iOS7)或者600s(iOS6)运行时间可以处理后台操作
2.当180S或者600S时间过去之后,可以告知系统未完成任务,需要申请继续完成,系统批准申请之后,可以继续运行,但总时间不会超过10分钟。
3.当10分钟时间到之后,无论怎么向系统申请继续后台,系统会强制挂起App,挂起所有后台操作、线程,直到用户再次点击App之后才会继续运行。
4.下面我就使用定位服务来实现iOS的后台无限制运行
4、代码实现
4.1、配置工程
在工程->targets->Capabilities->Background Modes
选择后台运行的api在info.plist中配置定位权限:
配置定位权限4.2、直接撸代码:
因为iOS7、iOS8、iOS9中定位都有所区别,所以我们需要判断不同的系统版本来进行相应的处理
判断系统版本:[[[UIDevice currentDevice] systemVersion ] floatValue]
运用系统的定位方法,在这里我封装了一个定位方法:
GitHub地址:https://github.com/CookiesFor/Location.git
4.3、使用方法:
在你需要启用后台定位的地方
先判断手机的后台定位是否可用:
判断手机定位是否可用手机定位如果可以使用,则开启定位服务:
self.bgLocation = [[BGLogation alloc]init];
[self.bgLocation startLocation];
在需要关闭的时候关闭定位服务:
[self.bgLocation stopLocation];
注意:此处的self.bgLocation一定要和开启的时候是一个对象
欢迎大家指正和补充,共同学习探讨!!!
在这里也要感谢,大家关于定位的博客。
网友评论