From bdc18c9eb68b40b98402ac0c7e639e812180c486 Mon Sep 17 00:00:00 2001 From: Hannes Janetzek Date: Sun, 2 Feb 2014 14:13:00 +0100 Subject: [PATCH] add option to run SimpleWorker task onMainLoop before execution on worker-thread --- .../org/oscim/utils/async/SimpleWorker.java | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/vtm/src/org/oscim/utils/async/SimpleWorker.java b/vtm/src/org/oscim/utils/async/SimpleWorker.java index cee4c6cd..32f4975f 100644 --- a/vtm/src/org/oscim/utils/async/SimpleWorker.java +++ b/vtm/src/org/oscim/utils/async/SimpleWorker.java @@ -8,7 +8,7 @@ import org.oscim.map.Map; */ public abstract class SimpleWorker implements Runnable { - private final Map mMap; + protected final Map mMap; protected boolean mRunning; protected boolean mWait; @@ -48,7 +48,12 @@ public abstract class SimpleWorker implements Runnable { return; } + // FIXME: mTaskTodo == null? if (mDelayed || mTaskTodo == null) { + + if (mDelayed) + onMainLoop(mTaskTodo); + // entered on main-loop mDelayed = false; // unset running temporarily @@ -88,6 +93,15 @@ public abstract class SimpleWorker implements Runnable { } + /** do stuff on main-loop before executing the task */ + public void onMainLoop(T task) { + + } + + /** + * If delay > 0 onMainLoop will be called before Task + * is passed to worker-thread + */ public synchronized void submit(long delay) { if (mRunning) { @@ -101,9 +115,10 @@ public abstract class SimpleWorker implements Runnable { return; } - mDelayed = true; - mMap.postDelayed(this, delay); - + if (!mDelayed) { + mDelayed = true; + mMap.postDelayed(this, delay); + } } public synchronized T poll() { @@ -133,4 +148,9 @@ public abstract class SimpleWorker implements Runnable { cleanup(mTaskTodo); finish(); } + + public synchronized boolean isRunning() { + return mRunning; + } + }