diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2014-05-17 22:07:57 +0200 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2014-05-17 22:07:57 +0200 |
| commit | d08ad2a31c3d5292a7276f9b74e84ee3ffefeae0 (patch) | |
| tree | 8e3305c15af2940e3169016f45699e0eda16cbc0 /main/src/cgeo/geocaching/ui | |
| parent | 9c8375c9d23fded750ec52b8347366fd20e8e6cb (diff) | |
| download | cgeo-d08ad2a31c3d5292a7276f9b74e84ee3ffefeae0.zip cgeo-d08ad2a31c3d5292a7276f9b74e84ee3ffefeae0.tar.gz cgeo-d08ad2a31c3d5292a7276f9b74e84ee3ffefeae0.tar.bz2 | |
#3818: remove further GC blocking references
Diffstat (limited to 'main/src/cgeo/geocaching/ui')
| -rw-r--r-- | main/src/cgeo/geocaching/ui/CompassView.java | 45 |
1 files changed, 32 insertions, 13 deletions
diff --git a/main/src/cgeo/geocaching/ui/CompassView.java b/main/src/cgeo/geocaching/ui/CompassView.java index 915303b..60982a9 100644 --- a/main/src/cgeo/geocaching/ui/CompassView.java +++ b/main/src/cgeo/geocaching/ui/CompassView.java @@ -17,6 +17,7 @@ import android.graphics.PaintFlagsDrawFilter; import android.util.AttributeSet; import android.view.View; +import java.lang.ref.WeakReference; import java.util.concurrent.TimeUnit; public class CompassView extends View { @@ -55,11 +56,40 @@ public class CompassView extends View { private boolean initialDisplay; private Subscription periodicUpdate; + private static final class UpdateAction implements Action0 { + + private final WeakReference<CompassView> compassViewRef; + + private UpdateAction(CompassView view) { + this.compassViewRef = new WeakReference<CompassView>(view); + } + + @Override + public void call() { + final CompassView compassView = compassViewRef.get(); + if (compassView == null) { + return; + } + compassView.updateGraphics(); + } + } + public CompassView(Context contextIn) { super(contextIn); context = contextIn; } + public void updateGraphics() { + final float newAzimuthShown = smoothUpdate(northMeasured, azimuthShown); + final float newCacheHeadingShown = smoothUpdate(cacheHeadingMeasured, cacheHeadingShown); + if (Math.abs(AngleUtils.difference(azimuthShown, newAzimuthShown)) >= 2 || + Math.abs(AngleUtils.difference(cacheHeadingShown, newCacheHeadingShown)) >= 2) { + azimuthShown = newAzimuthShown; + cacheHeadingShown = newCacheHeadingShown; + invalidate(); + } + } + public CompassView(Context contextIn, AttributeSet attrs) { super(contextIn, attrs); context = contextIn; @@ -87,24 +117,13 @@ public class CompassView extends View { initialDisplay = true; - periodicUpdate = AndroidSchedulers.mainThread().createWorker().schedulePeriodically(new Action0() { - @Override - public void call() { - final float newAzimuthShown = smoothUpdate(northMeasured, azimuthShown); - final float newCacheHeadingShown = smoothUpdate(cacheHeadingMeasured, cacheHeadingShown); - if (Math.abs(AngleUtils.difference(azimuthShown, newAzimuthShown)) >= 2 || - Math.abs(AngleUtils.difference(cacheHeadingShown, newCacheHeadingShown)) >= 2) { - azimuthShown = newAzimuthShown; - cacheHeadingShown = newCacheHeadingShown; - invalidate(); - } - } - }, 0, 40, TimeUnit.MILLISECONDS); + periodicUpdate = AndroidSchedulers.mainThread().createWorker().schedulePeriodically(new UpdateAction(this), 0, 40, TimeUnit.MILLISECONDS); } @Override public void onDetachedFromWindow() { periodicUpdate.unsubscribe(); + super.onDetachedFromWindow(); if (compassUnderlay != null) { |
