项目中需要用到地图功能,使用的是mapabc,但是在3.0以上真机上一直出现图层加载不出来,无法拖动,缩放也失效等问题,困扰了一周,写了不下5个demo单独测试均没有任何问题。仔细想了下,无法加载说明view不能显示,从这个角度出发,果然找出了问题的根源。
原因:从android3.0开始,android的2D显示管道被设计为更好的支持hardware(硬加速)了,硬加速使GPU承担了所有在view的canvas上执行的绘制操作。但是又因为hardware不是被所有的2D绘制所支持(问题出在这里,我怀疑mapabc的SDK可能不支持hardware),所以启用的时候可能会出现一些常见问题,比如view不可见,显示错误像素,或者直接产生异常等,这种问题尤其在一些自定义的view中出现的可能性会更大。
解决办法:在Manifest.xml中注册Activity的地方禁止当前acticity启用硬加速(添加属性android:hardwareAccelerated="false");但这样也会存在问题,比如用户如果手动开启自己手机的强制GPU渲染功能,那地图会出现之前所有的问题。所以最好的解决办法就是希望第三方的SDK能支持硬加速。
刚刚我特意在mapabc的api官网下载了最新的V5.3版本对应的demo,然后在清单文件中给工程开启硬加速,所有的模式都显示不出来了,只有矢量图可以看到地图上的字。V5.3版是官网能看到的最新版本了,也就是说mapabc不支持硬加速,所以以后要是再用到一定要注意。
原因:从android3.0开始,android的2D显示管道被设计为更好的支持hardware(硬加速)了,硬加速使GPU承担了所有在view的canvas上执行的绘制操作。但是又因为hardware不是被所有的2D绘制所支持(问题出在这里,我怀疑mapabc的SDK可能不支持hardware),所以启用的时候可能会出现一些常见问题,比如view不可见,显示错误像素,或者直接产生异常等,这种问题尤其在一些自定义的view中出现的可能性会更大。
解决办法:在Manifest.xml中注册Activity的地方禁止当前acticity启用硬加速(添加属性android:hardwareAccelerated="false");但这样也会存在问题,比如用户如果手动开启自己手机的强制GPU渲染功能,那地图会出现之前所有的问题。所以最好的解决办法就是希望第三方的SDK能支持硬加速。
刚刚我特意在mapabc的api官网下载了最新的V5.3版本对应的demo,然后在清单文件中给工程开启硬加速,所有的模式都显示不出来了,只有矢量图可以看到地图上的字。V5.3版是官网能看到的最新版本了,也就是说mapabc不支持硬加速,所以以后要是再用到一定要注意。