aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/ui
diff options
context:
space:
mode:
authorBananeweizen <bananeweizen@gmx.de>2014-05-17 22:07:57 +0200
committerBananeweizen <bananeweizen@gmx.de>2014-05-17 22:07:57 +0200
commitd08ad2a31c3d5292a7276f9b74e84ee3ffefeae0 (patch)
tree8e3305c15af2940e3169016f45699e0eda16cbc0 /main/src/cgeo/geocaching/ui
parent9c8375c9d23fded750ec52b8347366fd20e8e6cb (diff)
downloadcgeo-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.java45
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) {