У меня есть фрагмент, который использует диспетчер местоположений (android.location.LocationManager). mLocationManager и mLocationListener (android.location.LocationListener) являются частными переменными для фрагментации.LocationListener, протекающий во фрагменте, даже при правильном обращении
в onResume()
mLocationListener = new ABCLocationListener();
mLocationManager = (LocationManager) getActivity().getSystemService(
Context.LOCATION_SERVICE);
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10 * 1000L, 0F, mLocationListener);
в OnPause()
mLocationManager.removeUpdates(mLocationListener);
mLocationListener = null;
Я получаю утечки для ABCLocationListener.
logcat D/LeakCanary: | mListener = [email protected]87568 (0x33733270)
Что я проверил?
1) Хэш-значение для создаваемого объекта ABCLocationListener отличается от 0x33733270.
2) Оба метода onResume и onPause вызываются только один раз. Слушателя хэш-значение в обеих этих методах перед вызовом removeUpdates и requestLocationUpdates такого же
Какой тип родителя этого фрагмента - это ViewPager или вкладки? Также избегайте создания нового объекта из onResume() каждый раз. Просто создайте один раз и зарегистрируйтесь и отмените регистрацию. –