Android开发经验谈Android开发Android技术知识

地图类业务优化方法

2019-06-16  本文已影响3人  brycegao

一、背景
在百度地图、高德地图上显示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最大数量也是不同的。

二、优化方法


优化方法.png

一些业务在滑动屏幕时会删除所有地图上的Marker, 然后添加新的Marker点。 这种操作方式不存在内存开销大的问题, 可以忽略上面的方法;

使用缓存的优点是拖动屏幕时可以看到以前的Marker, 缺点是管理好Marker数量(避免内存开销大导致的卡顿)。

三、目标
缩放、滑动地图时可以看到缓存数据且操作流畅, 不会出现卡顿现象;

由于手机性能限制, 既要充分利用手机资源又要保证地图操作流畅, 需要合理的管理Marker的添加、删除行为。 每个Marker都是张Bitmap,太多了手机扛不住。

上一篇下一篇

猜你喜欢

热点阅读