2010-11-02 8 views
1

J'ai une activité qui implémente LocationListener.Comment nettoyer correctement les récepteurs d'emplacement dans les activités

public class MyActivity extends MapActivity implements LocationListener 

Dans mon activité, j'enregistrer un LocationListener dans le onCreate()

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

Dans la méthode OnDestroy, j'enlever l'inscription pour mon LocationListener.

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

Dans ma demande, je peux changer la mintime et de la distance, donc je re-initialiser mon auditeur comme ceci:

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

Pour des fins de débogage, je vous écris quelque chose à l'écran chaque fois qu'un fournisseur est activé (dans ce cas GPS). Ce que j'ai remarqué est que, parfois, plusieurs instances de mon activité (ou locationlistener) sont "conservées". Chaque fois que j'allume le fournisseur GPS, au lieu de voir 1 instruction "onProviderEnabled: GPS", je vois plusieurs instances différentes de mon activité imprimant cette ligne (toutes en même temps).

Comment puis-je nettoyer ces écouteurs (= mes activités), et m'assurer qu'un seul reste actif dans toute l'application.

+0

Juste pensé que je mentionnerais j'ai résolu le problème. – ddewaele

+0

L'activité a implémenté OnSharedPreferenceChangeListener. Pendant onCreate, l'activité a été enregistrée en tant que PreferenceChangelistener, mais elle n'a pas été enregistrée dans onDestroy(). En tant que tel, même après la destruction de l'activité, il y avait toujours une référence à l'activité, provoquant les messages en double. – ddewaele

Répondre

0

L'activité a implémenté OnSharedPreferenceChangeListener.

Lors de la création de la fonction onCreate, l'activité a été enregistrée en tant que PreferenceChangelistener, mais elle n'a pas été enregistrée dans onDestroy(). En conséquence, même après la destruction de l'activité, il y avait toujours une référence à l'activité, provoquant les messages en double.

Questions connexes