坑爹的高德地图

高德地图是一款使用广泛的地图产品 , 现在属于阿里集团 ,但是有许多接口方面的设计不像是出自阿里只手,倒像是一些半路出家 , 不懂设计的人员胡乱设计的.其中AMapNavi设计最烂.
来看代码:

AMapNavi.getInstance(getContext());

这段代码返回的是一个单例.注意是单例. 而且还他妈存在一个destory方法来销毁. 假设本人的页面跳转到另一个使用了地图的页面而那个页面也使用到了上述代码,并且在页面销毁的时候将这个对象给销毁了.那么问题就来了,返回之后会发现当前页面的这个对象是被销毁了的.这个倒是不是什么大问题 ,问题是TMD还没有日志.

再来看一段代码

    mAMapNavi.setAMapNaviListener(listener);

这段代码是用来设置监听的,比如我想请求两个点之间的路线信息这个监听就可以监听到请求的回调. 加入只是简单的地图应用这个也没有什么问题.
但是, 假如你的应用有用到多个有地图的界面, 比如A,B页面. 在A页面设置了这个监听, 跳转到B页面之后又设置了监听,你会发现B页面的监听没有起作用,反倒是A页面接收到了回调. 当然你会说可以用下面这段代码, 但是这样的话会导致两个地方都会接收到回调.

mAMapNavi.addAMapNaviListener(listener);

最好的办法是在每次使用完成之后将监听移除,以免影响到其他页面的使用. 如下面代码

 @Override public void onCalculateRouteFailure(int i) {
        mAMapNavi.removeAMapNaviListener(this);
      }

      @Override public void onCalculateRouteSuccess() {
        mAMapNavi.removeAMapNaviListener(this);
      }

// 在页面销毁的时候移除,监听
@Override public void onDestroy() {
    super.onDestroy();
    //移除监听回调
    mAMapNavi.removeAMapNaviListener(mNaviListener);
  }

我们在使用网络请求的时候 ,一般都是一个请求对应一个回调方法, 并且可以并发的发送请求,回调不会受到任何干扰, 高德地图API下面这段是用来请求,路径的.

mAMapNavi.calculateDriveRoute(sList, eList, mWayPointList, strategy);

但是这个请求只能等上一次调用完成之后才能进行下一次请求,因为它是公用监听的,假设有这样一种场景, 我需要请求5个以上点,的路径信息,那么高德地图,是无法通过一次请求来做到的,这就需要进行两次或者两次以上的请求,所以只能在第一次请求完成的时候再请求另一个路径信息. 不知道高德地图开发人员是吃了啥! 设计出这么垃圾的接口. 有失水准.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值