2016-03-01 4 views
0

В моем приложении используется утечка памяти, использующая OsmDroid. После некоторого поиска я обнаружил, что утечка вызвана методом MyLocationNewOverlay.enableMyLocation():OsmDroid MyLocationNewOverlay.enableMyLocation() вызвать утечку памяти

mMyLocationNewOverlay.enableMyLocation(); 

Если я комментирую эту линию, не будет никакой утечки памяти. Я думаю, что забыл удалить регистратор местоположения на onPause() или OnStop(). Поэтому я пытаюсь отменить его на onPause(), используя:

mMyLocationNewOverlay.disableMyLocation(); 

Однако утечка все еще происходит. Я даже попытался удалить весь mMyLocationNewOverlay, но он все еще не работает. Мне интересно, как правильно удалить регистратор местоположения в OsmDroid и исправить утечку памяти?

ответ

0

Вскоре после того, как я разместил вопрос, я нашел решение самостоятельно. Короче говоря, решение, когда добавляется новый MyLocationNewOverlay, старый MyLocationNewOverlay должен быть отключен перед удалением по телефону:

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

Простое удаление оверлей не будет работать, потому что обратный вызов все еще держит ссылку накладываемого ,

Конечно, лучше всего иметь только один MyLocationNewOverlay и управлять тем же (я допустил ошибку добавления нового). Надеюсь, это поможет кому-то с той же проблемой.