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