OsmDroid MyLocationNewOverlay.enableMyLocation() 导致内存泄漏
OsmDroid MyLocationNewOverlay.enableMyLocation() cause memory leak
我使用 OsmDroid 的应用程序存在内存泄漏。经过一番搜索,我发现泄漏是由 MyLocationNewOverlay.enableMyLocation() 方法引起的:
mMyLocationNewOverlay.enableMyLocation();
如果我注释掉那一行,就不会发生内存泄漏。我想我忘了在 onPause() 或 OnStop() 上注销位置侦听器。所以我尝试使用以下方法在 onPause() 注销它:
mMyLocationNewOverlay.disableMyLocation();
但是,泄漏仍然发生。我什至尝试删除整个 mMyLocationNewOverlay,但它仍然不起作用。我想知道在 OsmDroid 中注销位置侦听器并修复内存泄漏的正确方法是什么?
在我发布问题后不久,我自己找到了解决方案。简而言之,解决方案是每当添加新的 MyLocationNewOverlay 时,必须先禁用旧的 MyLocationNewOverlay,然后调用:
MyLocationNewOverlay.disableMyLocation();
MyLocationNewOverlay.disableFollowLocation(); // if you enabled this function on the overlay
简单地删除覆盖是行不通的,因为回调仍然持有覆盖的引用。
当然,最好的做法是只有一个MyLocationNewOverlay,并且管理相同(我弄错了,添加了一个新的)。我希望这会对遇到同样问题的人有所帮助。
我使用 OsmDroid 的应用程序存在内存泄漏。经过一番搜索,我发现泄漏是由 MyLocationNewOverlay.enableMyLocation() 方法引起的:
mMyLocationNewOverlay.enableMyLocation();
如果我注释掉那一行,就不会发生内存泄漏。我想我忘了在 onPause() 或 OnStop() 上注销位置侦听器。所以我尝试使用以下方法在 onPause() 注销它:
mMyLocationNewOverlay.disableMyLocation();
但是,泄漏仍然发生。我什至尝试删除整个 mMyLocationNewOverlay,但它仍然不起作用。我想知道在 OsmDroid 中注销位置侦听器并修复内存泄漏的正确方法是什么?
在我发布问题后不久,我自己找到了解决方案。简而言之,解决方案是每当添加新的 MyLocationNewOverlay 时,必须先禁用旧的 MyLocationNewOverlay,然后调用:
MyLocationNewOverlay.disableMyLocation();
MyLocationNewOverlay.disableFollowLocation(); // if you enabled this function on the overlay
简单地删除覆盖是行不通的,因为回调仍然持有覆盖的引用。
当然,最好的做法是只有一个MyLocationNewOverlay,并且管理相同(我弄错了,添加了一个新的)。我希望这会对遇到同样问题的人有所帮助。