Ich habe ein Fragment, das den Location Manager (android.location.LocationManager) verwendet. mLocationManager und mLocationListener (android.location.LocationListener) sind private Variablen, die fragmentiert werden sollen.LocationListener leckt in Fragmenten, selbst wenn sie entsprechend behandelt werden
in onResume()
mLocationListener = new ABCLocationListener();
mLocationManager = (LocationManager) getActivity().getSystemService(
Context.LOCATION_SERVICE);
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10 * 1000L, 0F, mLocationListener);
in onPause()
mLocationManager.removeUpdates(mLocationListener);
mLocationListener = null;
Ich erhalte Lecks für ABCLocationListener.
logcat D/LeakCanary: | mlistener = [email protected]87568 (0x33733270)
Was habe ich überprüft?
1) Der Hash-Wert für das erstellte ABCLocationListener-Objekt unterscheidet sich von 0x33733270.
2) Sowohl onResume als auch onPause-Methode werden nur einmal aufgerufen. Der Hash-Wert des Zuhörers in diesen beiden Methoden vor removeUpdates und requestLocationUpdates Aufruf ist die gleiche
Welche Art von Eltern dieses Fragments - Ist es ViewPager oder Tabs? Vermeiden Sie auch, jedes Mal ein neues Objekt von onResume() zu erstellen. Einfach einmal erstellen und registrieren und abmelden. –