定位,这么多年了,早就该成熟了
但权限的修改,系统的升级,还有图商们的改动。再加上各位面对的各种app工程架构,让你很难按照官方的文档去无风险的完成编程
标准做法
1 | //高德 |
一些坑
- 首先是权限的收紧,伴随着国内应用市场的严格审核,需要做到以下规范:
- 不能随意的在activity中开启定位服务。
- 在首页等用户第一次获取权限的定位位置时,最好能够展示地图,否则需要以明显弹窗告知用户权限使用的范围和目的
问题很明显在关闭
- APP的架构问题:
像demo那样标准的使用方式已经越来越少了,一般我们还是会对定位封装成一个带UI的widget,或者是一套自定义的service。这里的问题主要在于生命周期的管理,由于页面退出而没有自动解除listener等造成了leak等问题。也有可能页面具有多个定位widget或多个业务使用而造成的资源浪费,内存管理问题,生命周期问题(例如第一个widget定位完成后关闭定位,导致后面的定位请求被闲置)
解决一些问题
- 采用观察者模式,管理订阅定位信息的代码
- AOP前置拦截,规范定位权限申请
- 注册返回监听的时候,所使用到的对象不要使用weakReference之类的变量。以免在listener内执行,由于线程切换等原因,在listner先行退出的情况下,变量被清空。
- 通过androidx的activity生命周期管理,明确client的stop时机,如果是,不要执行高德的onDestory,或者将百度的setIgnoreKillProcess设为false。保留其service的留存