一、背景
在百度地图、高德地图上显示Marker, 如果显示数量很多时,滑动地图会出现卡顿的现象。 根本原因是地图是个耗内存的功能, 我们看到的地图和marker都是Bitmap。 想想在手机屏幕上添加100个小的Bitmap和背景的大Bitmap需要多少内存? 这些图片没有复用机制,都是储存在Java堆里,显示的Marker越多占用的内存越多。
滑动地图时可能出现卡顿甚至ANR的现象, 其实就是内存开销太大了,地图上显示了过多的Marker。
(Java_com_baidu_mapsdkplatform_comjni_map_basemap_JNIBaseMap_addOneOverlayItem+106)
native: #06 pc 00003c47 /data/app/com.lianjia.beike-yIWV6AK0FFsvTyKR4wM2sA==/oat/arm/base.odex (Java_com_baidu_mapsdkplatform_comjni_map_basemap_JNIBaseMap_addOneOverlayItem__JLandroid_os_Bundle_2+110)
at com.baidu.mapsdkplatform.comjni.map.basemap.JNIBaseMap.addOneOverlayItem(Native method)
at com.baidu.mapsdkplatform.comjni.map.basemap.a.f(unavailable:-1)
at com.baidu.mapsdkplatform.comapi.map.e.b(unavailable:-1)
...
什么是“多”? 这个词缺少量化的标准。 不同性能的手机可以显示的Marker最大数量也是不同的。
二、优化方法