彻底摧毁传单地图

Completely destroy Leaflet Map

我使用 Leaflet.js along with the excellent Leaflet Marker Clusterer 插件在 Cordova Android 应用程序中显示地图。当地图不再可见时,我使用

销毁它
map.off();
map.remove();

基于我在本论坛其他主题中找到的建议。但是,我不清楚这是否正在完成工作 - 例如,我发现标记聚类器层仍然存在。在每次后续地图重绘时销毁和重新创建地图容器 DOM 元素是否是一种确保地图上的所有内容都被销毁而没有内存泄漏的方法?

https://github.com/Leaflet/Leaflet/pull/5265 所述,简单地销毁 DOM 元素或删除它们的引用都不会释放内存:两者都需要以一致的方式在所有代码中按顺序完成让事情正常进行。将其与地图和图层之间的循环引用相结合,您将沿途遇到泄漏。

AFAIK,每次销毁地图时,核心 Leaflet 代码只会泄漏一个(而且只有一个)对 L.Draggable 的引用。很可能 MarkerCluster 代码没有清理干净,内部循环引用仍然存在。

另请注意,https://github.com/Leaflet/Leaflet/pull/5265 中所做的更改不是 Leaflet 1.0.3 版本的一部分。

所以这不是Leaflet(和Leaflet.MarkerCluster)如何使用的问题,而是内部代码如何泄漏的问题。 (欢迎为修复做出贡献)