高德地图InfoWindow崩溃

325 阅读2分钟

有一种痛,日夜相随

有一种恨,知错不改

有一种人,一往无前

一、解决方法

使用AMap.InfoWindowAdapter,不要使用AMap.ImageInfoWindowAdapter

二、崩溃

突然从一个版本开始(没有记错的话应该7.9.1)在友盟上统计好多的崩溃(看到了124个崩溃),并且崩溃点都是在高德地图的SDK中。

crash.jpg

立刻进行重现崩溃,地图什么操作会导致崩溃啊。开发和自测的时候没有碰到过啊,公司的测试小妹也没有说崩溃啊。奇了个怪。进行长久又枯燥的不停破坏性测试后,总结:

  1. 首页进行预约,然后取消预约。多试几次就崩溃。
  2. 行程中页面,点击附近的还车点。跳转到下一个页面。大概率会崩溃。
  3. 预约选中单车图片后,不显示单车图片。
  4. 不停的缩放地图,大概率崩溃。

三、分析

可以确认业务代码没有进行过修改。那么非常可能的是,高德地图升级后引入的问题。马上给高德地图提交了工单,描述了崩溃过程和崩溃日志。着急的等了好几天后,得到答复:

定位.jpg 可以明确的是在info window处崩溃了,原因不明。因为涉及到太多的业务逻辑,所以在高德地图的Demo上重现的可能性为零。 临时能够解决的办法是回退高德地图的版本,将版本回退到7.7.0版本,崩溃消失,一切功能都正常了。(在最新版本8.0.0,8.0.1,8.1.0也一样会崩溃)

四、 解决

用临时方法先救急后,赶紧排查代码。

WechatIMG170.jpeg

唯一用到的Info window就是这个*“最近”*了。可是用法与官网的一模一样啊,没有任何特殊的地方。调出Git的历史记录,这个文件的修改记录一直看到3年前,都没有发现什么问题。不停的添加测试代码,打印日志,都正常。就是突然的崩溃来的那么的突然。 最后采用最无奈又最傻的办法,将Info Windown的所有代码删除。然后从零开始编写,按照高德地图的Demo,一行不差的编写。!_! 一切又是那么NICE了。我的天,崩溃消失了。

五、总结

比较两个代码,唯一的区别在于实现的接口不一样,ImageInfoWindowAdapterInfoWindowAdapter。而InfoWindowAdapterImageInfoWindowAdapter的父类,所以使用ImageInfoWindowAdapter一直都是没有问题的。 没想到高德地图底层进行不同的处理。具体什么不同呢,问了高德地图客服,没有答复。

// END 深深地明白,查看源码是程序员的自我修养。