Frage

Ich habe eine Tätigkeit, die Geräte Location.

public class MyActivity extends MapActivity  implements LocationListener

In meiner Tätigkeit, melde ich ein Location im onCreate ()

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

In der onDestroy Methode, ich bin die Registrierung für meine Location zu entfernen.

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

In meiner Anwendung kann ich die MINTIME ändern und Distanz, so dass ich meine Zuhörer wie diese erneut initialisiert werden:

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

Für Debugging-Zwecke, schreibe ich etwas auf den Bildschirm, wenn ein Anbieter aktiviert ist (in diesem Fall GPS).

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

Was bemerkte ich, ist, dass manchmal mehrere Instanzen meiner Tätigkeit (oder Location) sind „gehalten um“. Jedes Mal, wenn ich die GPS-Provider einschalten, statt zu sehen, 1 Anweisung „onProviderEnabled: GPS“., Ich habe mehrere verschiedene Instanzen meiner Aktivität sehen Drucken Sie diese Zeile (alle zur gleichen Zeit)

Wie reinige ich die Hörer auf (= meine Aktivitäten), und stellen Sie sicher, dass nur 1 bleibt aktiv in der gesamten Anwendung.

War es hilfreich?

Lösung

Die Aktivität implementiert OnSharedPreferenceChangeListener.

Während onCreate wurde die Aktivität als PreferenceChangelistener registriert, aber nicht in der onDestroy nicht registriert ().

Als solche auch nach der Aktivität zerstört wurde, gab es noch ein Verweis auf die Aktivität, die doppelte Nachrichten zu verursachen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top