我使用Leaflet.js和出色的Leaflet Marker Clusterer插件在 Cordova Android 应用程序中显示地图。当地图不再可见时,我使用
map.off();
map.remove();
根据我在这个论坛的其他线程中找到的建议。但是,我不清楚这是在做这项工作 - 例如,我发现标记聚类器层仍然存在。在每次后续地图重绘时销毁和重新创建地图容器 DOM 元素是否是一种确保地图上的所有内容都被销毁而没有内存泄漏的方法?
我使用Leaflet.js和出色的Leaflet Marker Clusterer插件在 Cordova Android 应用程序中显示地图。当地图不再可见时,我使用
map.off();
map.remove();
根据我在这个论坛的其他线程中找到的建议。但是,我不清楚这是在做这项工作 - 例如,我发现标记聚类器层仍然存在。在每次后续地图重绘时销毁和重新创建地图容器 DOM 元素是否是一种确保地图上的所有内容都被销毁而没有内存泄漏的方法?
如https://github.com/Leaflet/Leaflet/pull/5265中所述,简单地破坏 DOM 元素或删除它们的引用都不会释放内存:两者都需要在所有代码中以一致的方式完成让事情正常进行。将其与地图和图层之间的循环引用相结合,您将在此过程中得到泄漏。
L.Draggable
AFAIK,每次破坏地图时,核心 Leaflet 代码只会泄漏一个(并且只有一个)引用。MarkerCluster 代码很可能没有清理干净,内部循环引用仍然存在。
另请注意,在https://github.com/Leaflet/Leaflet/pull/5265中所做的更改不属于 Leaflet 1.0.3 版本。
所以这不是如何使用 Leaflet(和 Leaflet.MarkerCluster)的问题,而是如何在内部代码中发生泄漏的问题。(欢迎为解决这个问题做出贡献)