2010-11-02 8 views
1

У меня есть деятельность, которая реализует LocationListener.Howto очистка местоположения слушателей в действиях правильно

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 остается активным во всем приложении.

+0

Просто подумал, что я бы сказал, что я решил проблему. – ddewaele

+0

Выполненная функция OnSharedPreferenceChangeListener. Во время onCreate активность была зарегистрирована в качестве предпочтенияChangelistener, но не была зарегистрирована в onDestroy(). Таким образом, даже после того, как активность была уничтожена, все еще была ссылка на активность, в результате чего дублировались сообщения. – ddewaele

ответ

0

Деятельность, реализованная OnSharedPreferenceChangeListener.

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

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