地圖類業務優化方法

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

二、優化方法
在這裏插入圖片描述
一些業務在滑動屏幕時會刪除所有地圖上的Marker, 然後添加新的Marker點。 這種操作方式不存在內存開銷大的問題, 可以忽略上面的方法;

使用緩存的優點是拖動屏幕時可以看到以前的Marker, 缺點是管理好Marker數量(避免內存開銷大導致的卡頓)。

三、目標
縮放、滑動地圖時可以看到緩存數據且操作流暢, 不會出現卡頓現象;

由於手機性能限制, 既要充分利用手機資源又要保證地圖操作流暢, 需要合理的管理Marker的添加、刪除行爲。 每個Marker都是張Bitmap,太多了手機扛不住。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章