定位于定位优化

1.定位的方案

最近在做项目, 遇到了一个问题就是如何让iOS7~~iOS9的定位.因为项目需求只是需要获取用户所在的城市, 而不用十分具体详细的精确定位, 服务端考虑用区号, 作为标识,但是看了百度的SDK, 不忍吐槽.最后决定用高德的SDK进行定位的开发.高德的定位SDK也是基于CoreLocation框架进行二次的开发, 但是其提供具体的区号, 十分方便与服务端进行相应的逻辑开发.如果用原生的, 在大陆可能存在各种各样的问题, 因为大陆的iphone手机有韩版, 日版, 欧版, 美版, 就差没非版了, 这些手机获取的定位信息会存在七七八八的非中文编码, 十分头疼.所以就采用高德的定位SDK进行统一的定位解决.

2.定位的逻辑

使用高德的SDK定位, 十分简单, 直接导入其框架的主头文件

import <AMapLocationKit/AMapLocationKit.h>

.不要问我框架的主头文件是啥.接着直接使用高德的一次性定位,

[self.locationManager requestLocationWithReGeocode:YES completionBlock:^(CLLocation *location, AMapLocationReGeocode *regeocode, NSError *error) {

                if (!error) {   

                }
}];

在异步回调的block中就有相应的信息.如果出错error会有值, 不为空.

3.用户的体验:(跳转到开启定位服务)

我们知道当用户关闭定位服务, 或者禁止本程序进行定位的时候,最后是能在App中就直接跳转到相应的设置界面进行设置.这里为了程序的兼容和响应速度, 我采用CCLocationManager这个自带的类进行判断.为什么不使用高德的一次性定位, 进行间接的判断, 当error有值时候,提示开启定位服务.这里主要存在的问题是因为, 高德提供的一次性定位, 的定位速度不快, 我自己用起来都觉得很慢, 所以当用户点了定位, 还用等你去做定位请求后, 再通过这个定位结果判断是否开启定位服务, 是十分不合理的.所以我的思路便是采用CCLocationManager进行精确度最低的定位.

具体的逻辑就是

1.先判断定位服务是否开启

2.如果定位服务开启, 则判断当前程序的定位权限是否授权.我是直接通过CCLocationManager对象的startUpdatingLocation方法, 让其开始定位,然后在代理方法中进行判断,如果定位权限是开启的就会回调

locationManager:didUpdateLocations:

否则回调的是

locationManager:didFailWithError:

而当回调了didUpdateLocations时候我们就可以断定,定位服务是开启的,并且定位权限已经授权给应用程序, 则可以调用高德的SDK开始定位, 或者跳转到响应控制器中进行定位和具体的业务处理.

当然了, 不管是调用了上面哪个的代理方法, 都用调用定位管理器stopUpdatingLocation, 停止定位.因为我们只是需要知道这个信息, 不需要再继续定位.

4.关于定位的优化:

在程序中关于定位我做了两重的优化.或者说是缓存.

第一级缓存: 一进入应用程序后, 如果定位服务是开启的, 则开一个优先级最高的线程进行高德的一次定位.如果定位成功, 则将缓存中的定位信息清空, 写入新的定位信息.

第二季缓存: 在经过响应的控制器进行定位之前, 先从一级缓存中取到定位信息.如果有定位信息, 则不再进行高德的一次性定位, 如果没有定位信息, 则继续进行高德的一次性定位, 如果定位成功, 将定位信息写入缓存.

经过这样的优化, 定位服务是十分快速的~具体工程代码不披露了.涉及到公司的业务.大概的技术思路就是这样.

后续会用空,我会封装适用于国内的一个定位的第三方框架.上传到github, 敬请关注

定位于定位优化(iOS)的更多相关文章

  1. 移动端底部fixed固定定位输入框ios下不兼容

    简短记录下最近开发移动端项目碰到的小坑,产品需求做一个售后对话页面,底部固定输入框,和微信对话差不多,但是在ios下,fixed失效,输入框被虚拟键盘挡住,在安卓下是正常的. 尝试过网上说的很多方法, ...

  2. 微信H5页面嵌入百度地图---解决手机的webKit定位,ios系统对非https网站不提供支持问题

    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=yGQt ...

  3. Mali GPU OpenGL ES 应用性能优化--測试+定位+优化流程

    1. 使用DS-5 Streamline定位瓶颈 DS-5 Streamline要求GPU驱动启用性能測试,在Mali GPU驱动中激活性能測试对性能影响微不足道. 1.1 DS-5 Streamli ...

  4. 优化iOS程序性能的25个方法

    1. 用ARC管理内存 ARC(Automatic ReferenceCounting, 自己主动引用计数)和iOS5一起公布.它避免了最常见的也就是常常是因为我们忘记释放内存所造成的内存泄露.它自己 ...

  5. 基于vue-cli项目打包慢的定位优化过程

    入职一周后,上一个前端就离职了(超级坑爹的),留下了一个比较棘手的问题,就是基于vue-cli的项目打包超级慢,我接手项目的时候,打包需要45min(上个离职者也不知道原因),经过3个月之后,随着项目 ...

  6. unity3d优化IOS

    1. using UnityEngine; class GarbageCollectManager : MonoBehaviour {       public int frameFreq = 30; ...

  7. iOS定位原理和使用建议(转)

    原文:http://ibbs.91.com/thread-1548870-1-1.html 看到很多网友讨论iOS设备定位的问题,这里将我们所了解的关于iPhone.iPad.iPod等的定位原理做详 ...

  8. iOS开发——高级篇——地理定位 CoreLocation

    一.CoreLocation 在移动互联网时代,移动app能解决用户的很多生活琐事,比如周边:找餐馆.找KTV.找电影院等等导航:根据用户设定的起点和终点,进行路线规划,并指引用户如何到达 在上述应用 ...

  9. iOS定位服务编程详解

    现在的移动设备很多都提供定位服务,使用iOS系统的iPhone.iPod Touch和iPad都可以提供位置服务,iOS设备能提供3种不同途径进行定位:Wifi, 蜂窝式移动电话基站, GPS卫星 i ...

随机推荐

  1. 【剑指offer】面试题38:数字在排序数组中出现的次数

    题目: 统计一个数字在排序数组中出现的次数. 思路: 对二分查找进行改进,找到数字在数组中第一次出现和最后一次出现的位置,这样就得到它出现的次数. 以找第一次出现的位置为例:如果mid元素大于k,则在 ...

  2. 关于void*函数返回

    一. sample #include<iostream> using namespace std; void* test(void* pass) { return pass; } int ...

  3. Java使用线程池递归压缩文件夹下面的所有子文件

    本文将介绍Java中利用线程池递归的方式压缩文件夹下面的所有子文件,具体方法如下: Gzip单个文件压缩 对于单个文件使用GZip压缩. package date0805.demo1; import ...

  4. poj 1274 The Perfect Stall(二分图匹配)

    Description Farmer John completed his new barn just last week, complete with all the latest milking ...

  5. POJ 2392 Space Elevator 背包题解

    多重背包.本题不须要二分优化.相对简单点.由于反复数十分小,小于10. 而添加一个限制每种材料的高度做法.假设使用逆向填表,那么仅仅须要从这个高度往小递归填表就能够了. 还有就是注意要排序,以限制高度 ...

  6. WebView使用

    WebView是View的一个子类,可以让你在activity中显示网页. 可以在布局文件中写入WebView:比如下面这个写了一个填满整个屏幕的WebView: <?xml version=& ...

  7. 网站全局js代码

    这几天开始看公司的一套系统,整理的网站全局js代码 /*文件名:base.js功能说明:全站通用的全局变量及公用方法创建日期:2010-09-26*///引入jquery库文件document.wri ...

  8. 工欲善其事必先利其器---SQL在线可视化模型设计,(还可学习拖拽知识)

    作为技术人员,在开发项目中,不可避免的要跟数据库打交道,一个完整的项目正常情况下是讨论完整体需求,有了大致的框框在脑海中后,是需要设计合理的数据库的,这时会有其他的专业的UML建模工具可以使用, 但是 ...

  9. linux make

    linux make file 以下是转载 感谢原作者 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和 ...

  10. JavaScript优化参考

    最近在为管理系统的网站做点优化,压缩都用了工具,就没太多可以讨论的. 主要还是代码上的精简和优化.稍微整理一下,顺便做点测试. 这里先贴上项目中用来替代iFrame的Ajax处理的局部代码,本人比较讨 ...