iOS后台运行-实时定位

作者: 郭伟_技术与产品 | 来源:发表于2017-02-11 10:16 被阅读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一定要和开启的时候是一个对象

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

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

相关文章

网友评论

  • 饥人谷_张炜:楼主在么? 我有个事情麻烦问一下 我app在后台的时候可以定位, 但是在屏幕锁屏的时候就拿不到数据了
  • 陈藩:请问在iOS8上会崩溃,在ios9,iOS10号完全OK是什么原因呢?
    郭伟_技术与产品:@寒塘秋客 _locationManager.allowsBackgroundLocationUpdates = YES;,在iOS9才有的,加个判断就行了
  • IAMCifi:你好 问下 你这种审核可以通过吗
    IAMCifi:@未就业的Cookies 好的 谢谢
    郭伟_技术与产品:可以的,我的app就是这样

本文标题:iOS后台运行-实时定位

本文链接:https://www.haomeiwen.com/subject/eqonittx.html