【问题标题】:OsmDroid MyLocationNewOverlay.enableMyLocation() cause memory leakOsmDroid MyLocationNewOverlay.enableMyLocation() 导致内存泄漏
【发布时间】:2016-03-01 15:25:30
【问题描述】:

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

mMyLocationNewOverlay.enableMyLocation();

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

mMyLocationNewOverlay.disableMyLocation();

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

【问题讨论】:

    标签: android memory-leaks osmdroid mylocationoverlay


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-07-06
      • 2014-06-07
      • 2013-11-20
      • 2011-10-28
      • 2016-01-18
      • 2012-12-13
      • 1970-01-01
      • 2011-01-08
      • 2011-02-01
      相关资源
      最近更新 更多