我使用Leaflet.js和优秀的Leaflet Marker Clusterer插件在Cordova Android应用中显示地图。当地图不再在视野中时,我使用
销毁它map.off();
map.remove();
基于我在此论坛的其他主题中找到的建议。但是,我不清楚这是在做什么 - 例如,我发现标记聚类图层仍然存在。是否会在每次后续地图重绘时销毁并重新创建地图容器DOM元素,以确保地图上的所有内容都被销毁而没有内存泄漏?
答案 0 :(得分:2)
如https://github.com/Leaflet/Leaflet/pull/5265中所述,要么简单地销毁DOM元素,要么删除它们的引用不会释放内存:两者都需要在所有代码中以一致的方式完成,以便工作正常。结合地图和图层之间的圆形参考,你会在途中遇到泄漏。
AFAIK,每次破坏地图时,核心Leaflet代码只会泄漏一个(只有一个)L.Draggable
的引用。很可能MarkerCluster代码没有清理好,内部循环引用仍然存在。
另请注意,https://github.com/Leaflet/Leaflet/pull/5265中所做的更改
因此,如何使用Leaflet(和Leaflet.MarkerCluster)不是问题,这是内部代码中泄漏的问题。 (并且欢迎提供修复的贡献)