Как очистить местоположение слушателей в деятельности должным образом - PullRequest
1 голос
/ 02 ноября 2010

У меня есть Activity, которая реализует LocationListener.

public class MyActivity extends MapActivity  implements LocationListener

В своей деятельности я регистрирую locationlistener в onCreate ()

lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, distance, this);

В методе onDestroy яудаление регистрации для моего Locationlistener.

@Override
protected void onDestroy() {
    Utils.addDebugMsg(this,"onDestroy");
    lm.removeUpdates(this);
    super.onDestroy();
}

В моем приложении я могу изменить minTime и расстояние, поэтому я повторно инициализирую мой слушатель следующим образом:

private void initializeGpsListener() {
    lm.removeUpdates(this);
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, distance, this);
}

Для целей отладкиЯ что-то записываю на экран всякий раз, когда провайдер включен (в данном случае GPS).

    @Override
    public void onProviderEnabled(String provider) {
        Utils.addDebugMsg(this,"onProviderEnabled : " + provider);
    }

Что я заметил, так это то, что иногда несколько экземпляров моей активности (или Locationlistener) «держатся».Каждый раз, когда я включаю провайдера GPS, вместо того, чтобы видеть 1 оператор «onProviderEnabled: GPS», я вижу несколько разных случаев, когда моя активность печатает эту строку (все в одно и то же время).

Как выполнить очисткуэти слушатели (= мои действия), и убедитесь, что только 1 остается активным во всем приложении.

1 Ответ

0 голосов
/ 29 апреля 2013

В Activity реализован OnSharedPreferenceChangeListener.

Во время onCreate действие было зарегистрировано как PreferenceChangelistener, но не зарегистрировано в onDestroy ().

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

...