aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/ui
diff options
context:
space:
mode:
authorSamuel Tardieu <sam@rfc1149.net>2013-05-25 15:30:11 +0200
committerSamuel Tardieu <sam@rfc1149.net>2013-05-25 15:30:11 +0200
commit43a0f4dfd94e0b47a60ddddcf58561dccecbac17 (patch)
treee63ce522ff4986b2ce00b2579d0c0b73bb1e5c92 /main/src/cgeo/geocaching/ui
parentda2451acb8169ae0380341f167f9f45fa1e92f7a (diff)
downloadcgeo-43a0f4dfd94e0b47a60ddddcf58561dccecbac17.zip
cgeo-43a0f4dfd94e0b47a60ddddcf58561dccecbac17.tar.gz
cgeo-43a0f4dfd94e0b47a60ddddcf58561dccecbac17.tar.bz2
refactoring: make periodic handler use weak references
PeriodicHandler now uses weak references to keep a link to the looper that requested it. This way, it will not prevent the source from being garbage collected even though a delayed message may be queued in the handler. Also, at the next iteration, the periodic handler will notice that its starter looper has been garbage collected and will stop itself if it has not been already.
Diffstat (limited to 'main/src/cgeo/geocaching/ui')
-rw-r--r--main/src/cgeo/geocaching/ui/CompassView.java33
1 files changed, 13 insertions, 20 deletions
diff --git a/main/src/cgeo/geocaching/ui/CompassView.java b/main/src/cgeo/geocaching/ui/CompassView.java
index 0ef3a43..c926057 100644
--- a/main/src/cgeo/geocaching/ui/CompassView.java
+++ b/main/src/cgeo/geocaching/ui/CompassView.java
@@ -3,6 +3,7 @@ package cgeo.geocaching.ui;
import cgeo.geocaching.R;
import cgeo.geocaching.utils.AngleUtils;
import cgeo.geocaching.utils.PeriodicHandler;
+import cgeo.geocaching.utils.PeriodicHandler.PeriodicHandlerListener;
import android.content.Context;
import android.graphics.Bitmap;
@@ -14,7 +15,7 @@ import android.util.AttributeSet;
import android.util.FloatMath;
import android.view.View;
-public class CompassView extends View {
+public class CompassView extends View implements PeriodicHandlerListener {
private Context context = null;
private Bitmap compassUnderlay = null;
@@ -48,7 +49,7 @@ public class CompassView extends View {
private int compassOverlayWidth = 0;
private int compassOverlayHeight = 0;
private boolean initialDisplay;
- private final RedrawHandler redrawHandler = new RedrawHandler();
+ private final PeriodicHandler redrawHandler = new PeriodicHandler(40, this);
public CompassView(Context contextIn) {
super(contextIn);
@@ -145,26 +146,18 @@ public class CompassView extends View {
return AngleUtils.normalize(actual + offset);
}
- private class RedrawHandler extends PeriodicHandler {
-
- public RedrawHandler() {
- super(40);
- }
-
- @Override
- public void act() {
- 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) {
- synchronized(CompassView.this) {
- azimuthShown = newAzimuthShown;
- cacheHeadingShown = newCacheHeadingShown;
- }
- invalidate();
+ @Override
+ public void onPeriodic() {
+ 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) {
+ synchronized(this) {
+ azimuthShown = newAzimuthShown;
+ cacheHeadingShown = newCacheHeadingShown;
}
+ invalidate();
}
-
}
@Override