问题描述
最近在使用高德地图SDK的过程中遇到了一个问题,就是在API 31以上版本调用mapView.onDestroy()方法时会导致程序崩溃。经过一番搜索和尝试,可以通过以下方式来解决这个问题。
问题梳理 / 解决
那么,这个问题为什么会出现呢?据了解,Android 11引入了一项新的安全特性,即Heap Pointer Tagging。这个特性可以使应用的堆指针更安全,避免被恶意程序利用。但是,一些SDK或第三方库可能不支持这个特性,导致在使用它们时出现问题。高德地图的DEMO使用的是targetSdkVersion=26,所以不会出现此问题。
对于高德地图SDK来说,在API 31以上版本调用mapView.onDestroy()方法时就会出现这个问题。这时候,我们就可以在AndroidManifest.xml文件中的application标签中加入以下属性:
android:allowNativeHeapPointerTagging="false"
这样,就可以关闭Heap Pointer Tagging特性,避免出现调用mapView.onDestroy()崩溃的问题了。
需要注意的是,关闭Heap Pointer Tagging特性可能会影响应用的安全性。因此,应该在必要的情况下才使用这个方法。如果能够升级高德地图SDK或等待高德方面发布修复版本,那就更好了。
总结
总之,对于遇到高德地图SDK在API 31以上版本调用mapView.onDestroy()崩溃问题的开发者,可以尝试在AndroidManifest.xml文件中加入android:allowNativeHeapPointerTagging="false"来解决。