Last active
November 18, 2020 20:07
-
-
Save Eduardo-Nunes/3b3ef4f3c7901231783b0f7e531bfc1f to your computer and use it in GitHub Desktop.
SimpleTimer for make repeatable tasks or not, in Android without break or stops MainThread
This file contains hidden or 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
import java.util.Timer | |
import java.util.TimerTask | |
import kotlin.concurrent.timerTask | |
private const val DEFAULT_EXECUTION_RATE = 6000L | |
class SimpleTimer { | |
var executionRate = DEFAULT_EXECUTION_RATE | |
private var mTrigger: (() -> Unit)? = null | |
private var timer: Timer? = null | |
private var uiTask: TimerTask? = null | |
fun start(isRepeated: Boolean = true, trigger: (() -> Unit)? = mTrigger) { | |
if (trigger == null) return | |
if (timer != null) stop() | |
mTrigger = trigger | |
timer = Timer() | |
uiTask = timerTask { | |
mTrigger?.invoke() | |
} | |
if (isRepeated) startRepeatedTask() else startUniqueTask() | |
} | |
private fun startRepeatedTask() { | |
timer?.scheduleAtFixedRate( | |
uiTask, executionRate * 2, | |
executionRate | |
) | |
} | |
private fun startUniqueTask() { | |
timer?.schedule(uiTask, executionRate) | |
} | |
fun stop(forNow: Boolean = true) { | |
uiTask?.cancel() | |
timer?.purge() | |
timer?.cancel() | |
timer = null | |
if(forNow.not()) mTrigger = null | |
} | |
fun isRunning(): Boolean = timer != null && uiTask != null | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment