iOS开发杂货铺iOS程序猿程序员

iOS后台运行-实时定位

2017-02-11  本文已影响770人  郭伟_技术与产品

1.先说说iOS 应用程序5个状态:

停止运行-应用程序已经终止,或者还未启动。

不活动-应用程序处于前台但不再接收事件(例如,用户在app处于活动时锁住了设备)。

活动-app处于“使用中”的状态。

后台-app不在屏幕上显示,但它仍然执行代码。

挂起-app仍然驻留内存但不再执行代码。

按下Home键时,app从活动状态转入后台,绝大部分app通常在180秒内就从后台变成了挂起。

在内存吃紧的时候,iPhone会首先关闭那些挂起的app。

现在的iOS系统,都会在你按下Home键时,app从活动状态转入后台,绝大部分app通常在300秒内就从后台变成了挂起;

2.如果想要无限制的后台运行,那就需要自己向iOS系统申请app后台运行

现在的iOS系统可以申请后台运行的api为:

后台运行api

3、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一定要和开启的时候是一个对象

欢迎大家指正和补充,共同学习探讨!!!

在这里也要感谢,大家关于定位的博客。

上一篇下一篇

猜你喜欢

热点阅读