Skip to content

Instantly share code, notes, and snippets.

@Eduardo-Nunes
Last active November 18, 2020 20:07
Show Gist options
  • Save Eduardo-Nunes/3b3ef4f3c7901231783b0f7e531bfc1f to your computer and use it in GitHub Desktop.
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
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