处理程序每 5 秒运行一次任务 Kotlin
Posted
技术标签:
【中文标题】处理程序每 5 秒运行一次任务 Kotlin【英文标题】:Handler to run task every 5 seconds Kotlin 【发布时间】:2017-12-30 11:11:20 【问题描述】:我想每 5 秒运行一次特定代码。我无法通过处理程序实现这一目标。在 Kotlin 中如何做到这一点?这是我到目前为止所拥有的。还要注意,变量 Timer_Preview 是一个 Handler。
【问题讨论】:
您可以递归地将Callable
传递给您的Handler
和sendMessageDelayed
。
请在问题中输入代码,不要链接到它,因为 a) 不是每个人都能下班到 imgur,b) 链接可能会过期,这个问题在未来将毫无用处。
感谢您告诉我!
【参考方案1】:
由于您不能引用当前所在的 lambda,并且在定义要分配给它的 lambda 时不能引用您定义的属性,所以这里最好的解决方案是 @ 987654321@:
val runnableCode = object: Runnable
override fun run()
handler.postDelayed(this, 5000)
假设此属性不是var
,因为您实际上想在此自调用发生时更改它。
【讨论】:
谢谢,这正是我想要的!效果很好 我是否正确假设您可以创建一个默认处理程序(即 val handler:Handler = Handler())然后启动它(即 handler.post(runnableCode))它会每 5 次运行一次秒你放在运行块中的所有内容(在 handler.postDelayed... 之前)?【参考方案2】:由于 Kotlin 还不允许递归 lambda(请参阅 KT-10350),您必须使用其他构造,例如 @zsmb13 答案中的对象表达式,或以下普通函数
fun StartTimer()
Timer_Preview.postDelayed(Runnable runnable() , 5000)
fun runnable()
//Code here
// Run code again after 5 seconds
Timer_Preview.postDelayed(Runnable runnable() , 5000)
但是,在您的特定情况下,您似乎可以再次调用 StartTimer()
来重新启动计时器,假设它没有做任何其他事情:
private val RunnableCode = Runnable
//Code here
//Run code again after 5 seconds
StartTimer()
【讨论】:
【参考方案3】:你可以用简单的函数来做到这一点:
private fun waitToDoSomethingRecursively()
handler.postDelayed(::doSomethingRecursively, 5000)
private fun doSomethingRecursively ()
...
waitToDoSomethingRecursively()
【讨论】:
【参考方案4】:只需使用fixedRateTimer
fixedRateTimer("timer",false,0,5000)
this@MainActivity.runOnUiThread
Toast.makeText(this@MainActivity, "text", Toast.LENGTH_SHORT).show()
通过为第三个参数设置另一个值来更改初始延迟。
【讨论】:
离开时别忘了收拾东西,例如在 android 上:myFixedRateTimer.cancel()【参考方案5】:我推荐SingleThread,因为它非常有用。如果你想每秒做一个工作,你可以设置它的参数:
Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit);
TimeUnit 值是:NANOSECONDS、MICROSECONDS、MILLISECONDS、SECONDS、MINUTES、HOURS、DAYS。
示例:
private fun mDoThisJob()
Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(
//TODO: You can write your periodical job here..!
, 1, 1, TimeUnit.SECONDS)
【讨论】:
以上是关于处理程序每 5 秒运行一次任务 Kotlin的主要内容,如果未能解决你的问题,请参考以下文章