OsmDroid MyLocationNewOverlay.enableMyLocation()导致内存泄漏

时间:2016-03-01 15:25:31

标签: android memory-leaks osmdroid mylocationoverlay

我的应用中存在使用OsmDroid的内存泄漏。经过一些搜索,我发现泄漏是由MyLocationNewOverlay.enableMyLocation()方法引起的:

mMyLocationNewOverlay.enableMyLocation();

如果我评论该行,则不会有内存泄漏。我想我忘了在onPause()或OnStop()上取消注册位置监听器。所以我尝试使用:

在onPause()上注销它
mMyLocationNewOverlay.disableMyLocation();

然而,仍然会发生泄漏。我甚至试图删除整个mMyLocationNewOverlay,但它仍然无法正常工作。我想知道在OsmDroid中取消注册位置监听器并修复内存泄漏的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

我发布问题后不久,我自己找到了解决方案。简而言之,解决方案是每当添加新的MyLocationNewOverlay时,必须在删除之前通过调用禁用旧的MyLocationNewOverlay:

MyLocationNewOverlay.disableMyLocation();
MyLocationNewOverlay.disableFollowLocation(); // if you enabled this function on the overlay

简单地删除叠加层是行不通的,因为回调仍然保留了叠加层的引用。

当然,最好的做法是只有一个MyLocationNewOverlay并管理相同的内容(我犯了添加新内容的错误)。我希望这能帮助有同样问题的人。