如何使用处理程序创建计时器

时间:2019-04-18 15:32:35

标签: android kotlin handler runnable

需要在android中创建秒表,现在我有了这样的想法,一个简单的函数可以开始计数并显示时间,但是我不知道后延迟在做什么:

fun runTimer() {
        val timeView = findViewById<TextView>(R.id.time_view)
        val handler = Handler()
        handler.post(Runnable {
            var hours = seconds / 3600
            var minutes = (seconds % 3600) / 60
            var secs = seconds % 60
            var time = String.format("%d:%02d:%02d", hours, minutes, secs)
            timeView.setText(time)
            if (running) {
                seconds++
            }
            handler.postDelayed(this, 1000)
        })
    }

我应该确切地放些什么呢? (需要为可运行类型)

2 个答案:

答案 0 :(得分:1)

我相信在您的用例中,最合适的解决方案是使用计时表-您可以详细了解here。另外,如果您想观看视频教程,可以查看此video。希望这可以帮助。另外,如果您希望具有使用CountDownTimer设置特定时间范围和倒数计时的功能,则是一个不错的选择-documentation

答案 1 :(得分:0)

我像这样使用处理程序作为Timer:

class TimerClass {

fun startTimer( handler : Handler ,
                   stuffToDo : () -> Unit ,
                   stopTimeInSeconds : Int ,
                   timePassed : Int ,
                   interval : Long){

    handler.postDelayed( {

        stuffToDo.invoke()
        if (timePassed < stopTimeInSeconds){
            startTimer(handler ,
                stuffToDo ,
                stopTimeInSeconds ,
                timePassed + 1 ,
                interval)
        }

    } , interval)

}}

然后使用它:

   val time = TestClass()

    time.startTimer(handler = Handler() ,
        stuffToDo = { textView.text = "some new text" } ,
        stopTimeInSeconds = 5 ,
        timePassed = 0 , 
        interval = 1000)

因此,您在类中定义了一个方法,并提供了所有依赖项(对象)并将其注入,您正在创建要作为lambda函数执行的操作。然后调用处理程序延迟方法,如果条件(if语句)为true,则在处理程序中将以增量(timePassed + 1)递归调用方法本身。 现在您有了一个工作计时器。