Created
June 2, 2017 15:29
-
-
Save caseykulm/132b5db2cbca003e95ee9c02a177dea0 to your computer and use it in GitHub Desktop.
Serial Delay Util
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class SerialDelayUtil { | |
private final SerialDelayHandler serialDelayHandler; | |
public SerialDelayUtil() { | |
this.serialDelayHandler = new SerialDelayHandler(Looper.getMainLooper()); | |
} | |
/** | |
* <p> | |
* Runs the runnable after millisDelay, but every time this function is called | |
* all previous calls that are still enqueued will be cancelled and the current | |
* call will be enqueued. | |
* </p> | |
* <p> | |
* Example 1:<br/> | |
* <code><br/> | |
* serialDelayUtil.postDelayed(runnable1, 5000);<br/> | |
* serialDelayUtil.postDelayed(runnable2, 5000);<br/> | |
* serialDelayUtil.postDelayed(runnable3, 5000);<br/> | |
* </code><br/> | |
* In this example only runnable3 will be run | |
* </p> | |
* <p> | |
* Example 2:<br/> | |
* <code><br/> | |
* serialDelayUtil.postDelayed(runnable1, 5000);<br/> | |
* Thread.sleep(6000);<br/> | |
* serialDelayUtil.postDelayed(runnable2, 5000);<br/> | |
* </code><br/> | |
* In this example both runnable1 and runnable2 will be run | |
* </p> | |
* <p> | |
* Note: The runnable will always be run on the {@link Looper#getMainLooper()} | |
* </p> | |
* | |
* @param runnable Runnable to perform after delay | |
* @param millisDelay Milliseconds to wait before calling run on runnable | |
*/ | |
public void postDelayed(Runnable runnable, int millisDelay) { | |
serialDelayHandler.removeMessages(SerialDelayHandler.MSG_RUN_TASK); | |
serialDelayHandler.sendMessageDelayed(serialDelayHandler.obtainMessage(SerialDelayHandler.MSG_RUN_TASK, runnable), millisDelay); | |
} | |
private static class SerialDelayHandler extends Handler { | |
private static final int MSG_RUN_TASK = 1; | |
private SerialDelayHandler(Looper looper) { | |
super(looper); | |
} | |
@Override | |
public void handleMessage(Message msg) { | |
switch (msg.what) { | |
case MSG_RUN_TASK: { | |
Runnable runnable = (Runnable) msg.obj; | |
runnable.run(); | |
break; | |
} | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment