私は位置マネージャ(android.location.LocationManager)を使用するフラグメントを持っています。 mLocationManagerおよびmLocationListener(android.location.LocationListener)は、フラグメント化するプライベート変数です。 onPauseでLocationListenerが適切に処理されてもフラグメントに漏れている
onResumeで()
mLocationListener = new ABCLocationListener();
mLocationManager = (LocationManager) getActivity().getSystemService(
Context.LOCATION_SERVICE);
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10 * 1000L, 0F, mLocationListener);
()
mLocationManager.removeUpdates(mLocationListener);
mLocationListener = null;
私はABCLocationListenerのためのリークを取得しています。
logcat D/LeakCanary:| mListener = [email protected]87568(0x33733270)
私は何を確認しましたか?
1)作成されるABCLocationListenerオブジェクトのハッシュ値が0x33733270とは異なります。
2)onResumeメソッドとonPauseメソッドの両方が1回だけ呼び出されています。 removeUpdatesとrequestLocationUpdatesを呼び出す前に、これらのメソッドの両方で、リスナーのハッシュ値が
このフラグメントの親のタイプ - ViewPagerまたはタブですか? また、毎回onResume()から新しいオブジェクトを作成することは避けてください。一度だけ作成して登録し、登録を解除してください。 –