diff options
author | Tobrun <tobrun.van.nuland@gmail.com> | 2016-08-11 17:33:02 -0400 |
---|---|---|
committer | Tobrun <tobrun.van.nuland@gmail.com> | 2016-08-11 18:13:12 -0400 |
commit | 0ae941d2a8a89276e1f0c2cf3870104d0e94fbc4 (patch) | |
tree | 553f6c9bc211374834d7734a991bd7f83804e9db /platform/android/MapboxGLAndroidSDK | |
parent | a3e20bae32c17fe976a345e2b38166116d331c1f (diff) | |
download | qtlocation-mapboxgl-0ae941d2a8a89276e1f0c2cf3870104d0e94fbc4.tar.gz |
[android] #5934 - resolves memory leaks on animators + location listeners
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK')
2 files changed, 39 insertions, 5 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java index 318eec80b4..54f165ac86 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java @@ -1493,6 +1493,14 @@ public class MapView extends FrameLayout { if (mMapboxMap.getUiSettings().isZoomControlsEnabled()) { mZoomButtonsController.setVisible(false); } + + // make sure we don't leak location listener + if (mMyLocationListener != null) { + // cleanup to prevent memory leak + LocationServices services = LocationServices.getLocationServices(getContext()); + services.removeLocationListener(mMyLocationListener); + mMyLocationListener = null; + } } // Called when view is hidden and shown diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java index 72f8196091..bfc1711af2 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/MyLocationView.java @@ -320,11 +320,6 @@ public class MyLocationView extends View { setBearing(position.bearing); } - public void onPause() { - compassListener.onPause(); - toggleGps(false); - } - public void onResume() { if (myBearingTrackingMode == MyBearingTracking.COMPASS) { compassListener.onResume(); @@ -334,6 +329,37 @@ public class MyLocationView extends View { } } + public void onPause() { + compassListener.onPause(); + toggleGps(false); + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + // cleanup to prevent memory leaks + if (locationChangeAnimator != null) { + locationChangeAnimator.cancel(); + locationChangeAnimator = null; + } + + if (accuracyAnimator != null) { + accuracyAnimator.cancel(); + accuracyAnimator = null; + } + + if (directionAnimator != null) { + directionAnimator.cancel(); + directionAnimator = null; + } + + if (userLocationListener != null) { + LocationServices services = LocationServices.getLocationServices(getContext()); + services.removeLocationListener(userLocationListener); + userLocationListener = null; + } + } + public void update() { if (isEnabled()) { myLocationBehavior.invalidate(); |