Come pulire localizzazione ascoltatori in attività correttamente
-
28-09-2019 - |
Domanda
Ho un'attività che implementa LocationListener.
public class MyActivity extends MapActivity implements LocationListener
Nella mia attività, ho registrare un LocationListener nel onCreate ()
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, distance, this);
Nel metodo OnDestroy, sto rimuovendo la registrazione per la mia LocationListener.
@Override
protected void onDestroy() {
Utils.addDebugMsg(this,"onDestroy");
lm.removeUpdates(this);
super.onDestroy();
}
Nella mia domanda, posso cambiare il MINTIME e la distanza, in modo da reinizializzare il mio ascoltatore in questo modo:
private void initializeGpsListener() {
lm.removeUpdates(this);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, distance, this);
}
Per scopi di debug, scrivo qualcosa sullo schermo ogni volta che un fornitore è abilitato (in questo caso il GPS).
@Override
public void onProviderEnabled(String provider) {
Utils.addDebugMsg(this,"onProviderEnabled : " + provider);
}
Quello che ho notato è che a volte, più istanze della mia attività (o LocationListener) sono "tenuti in giro". Ogni volta che accendo il provider GPS sulla, invece di vedere 1 affermazione "onProviderEnabled: GPS"., Vedo diverse istanze della mia stampa di questa linea (tutti allo stesso tempo) Attività
Come faccio a ripulire questi ascoltatori (= le mie attività), e assicurarsi che solo 1 rimane attivo in tutta l'applicazione.
Soluzione
L'Attività implementato OnSharedPreferenceChangeListener.
Nel corso onCreate, l'attività è stata registrata come PreferenceChangelistener, ma non non registrati negli OnDestroy ().
In quanto tale, anche dopo che l'attività è stata distrutta, c'era ancora un riferimento all'attività, causando i messaggi duplicati.