0

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

mMyLocationNewOverlay.enableMyLocation();

如果我注释掉那条线,就不会有内存泄漏。我想我忘了在 onPause() 或 OnStop() 处取消注册位置监听器。所以我尝试使用以下方法在 onPause() 注销它:

mMyLocationNewOverlay.disableMyLocation();

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

4

1 回答 1

0

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

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

简单地删除覆盖是行不通的,因为回调仍然持有覆盖的引用。

当然,最好的做法是只拥有一个 MyLocationNewOverlay 并对其进行管理(我犯了添加新的错误)。我希望这会帮助有同样问题的人。

于 2016-03-02T01:34:11.783 回答