创建一个在每个时间间隔运行的函数,并阻止该函数与Android Studio中的Kotlin一起运行

问题描述 投票:0回答:2

我想创建一个每50毫秒运行一次的函数(相当于JS中的setInterval)。到目前为止,这就是我所拥有的:

val mainHandler = Handler(Looper.getMainLooper())
mainHandler.post(object: Runnable {
    override fun run() {
        progressBar.progress += 1
        mainHandler.postDelayed(this, 50)
    }
})

它有效,但是当进度达到run()时,如何停止100功能的进一步运行?此外,当我单击按钮时(例如JS中的run),是否可以取消progress并将0重置为clearInterval?供参考,我想要这个:

buttonView.setOnClickListener {
    stopRunFromRunning()
    resetProgressTo0()
}

progress.onReach100 {
    stopRunFromRunning()
}
android kotlin android-handler android-looper
2个回答
3
投票

将可运行对象分配给变量,然后可以从处理程序的回调中删除

val progressBar = findViewById(R.id.progress_bar)
val btn = findViewById(R.id.btn)

val handler = Handler(Looper.getMainLooper())
val runnable = Runnable {
    override public fun run() {
     progressBar.progress+=1
       if(progressBar.progress<100)
          handler.postDelayed(this, 50) 
    }
}

handler.post(runnable, milliseconds)

btn.setOnClickListener {
    handler.removeCallbacks(runnable)
    progressBar.progress=0
}


0
投票

使用进度栏时,我会执行类似的操作:

var stop = false
val runnable = Runnable {
       while (progressBar.progress < 100) {
            if(stop) break

            progressBar.progress += 1
            // Try to sleep the thread for 50 milliseconds
            try {
                Thread.sleep(50)
            } catch (e: InterruptedException) {
                e.printStackTrace()
            }
       }
}
Thread(runnable).start()

// stop
stopButtonClick -> {
    stop = true
    progressBar.progress = 0
}

现在您可以告诉计数器在progressBar.progress = 100之前停止,您的计数器也知道何时停止。希望对您有所帮助

© www.soinside.com 2019 - 2024. All rights reserved.