作为标题,在Kotlin中是否有方法在延迟(例如1秒)后调用函数?
当前回答
一个简单的例子来展示3秒后的祝酒词:
fun onBtnClick() {
val handler = Handler()
handler.postDelayed({ showToast() }, 3000)
}
fun showToast(){
Toast.makeText(context, "Its toast!", Toast.LENGTH_SHORT).show()
}
其他回答
很多方面
1. 使用Handler类
Handler().postDelayed({
TODO("Do something")
}, 2000)
2. 使用Timer类
Timer().schedule(object : TimerTask() {
override fun run() {
TODO("Do something")
}
}, 2000)
// Shorter
Timer().schedule(timerTask {
TODO("Do something")
}, 2000)
// Shortest
Timer().schedule(2000) {
TODO("Do something")
}
3.使用Executors类
Executors.newSingleThreadScheduledExecutor().schedule({
TODO("Do something")
}, 2, TimeUnit.SECONDS)
还有一个选项使用Handler -> postDelayed
Handler().postDelayed({
//doSomethingHere()
}, 1000)
如果你正在使用最新的Android api, Handler空构造函数已经被弃用,你应该包括一个循环程序。你可以很容易地通过loop . getmainlooper()得到一个。
Handler(Looper.getMainLooper()).postDelayed({
//Your code
}, 2000) //millis
我推荐使用SingleThread,因为你不需要在使用后杀死它。此外,“stop()”方法在Kotlin语言中已弃用。
private fun mDoThisJob(){
Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate({
//TODO: You can write your periodical job here..!
}, 1, 1, TimeUnit.SECONDS)
}
此外,您可以使用它定期工作。它非常有用。如果你想在每一秒内完成一个任务,你可以设置它的参数:
Executors.newSingleThreadScheduledExecutor()。scheduleAtFixedRate(可运行命令,长initialDelay,长周期,TimeUnit unit);
时间单位值是:纳秒,微秒,毫秒,秒,分钟,小时,天。
如果你在一个带有viewModel作用域的片段中,你可以使用Kotlin协程:
myViewModel.viewModelScope.launch {
delay(2000)
// DoSomething()
}
推荐文章
- 如何在Android中获得一个RadioGroup的选定索引
- 如何分配文本大小在sp值使用java代码
- Swift 'if let'语句等价于Kotlin
- Manifest合并失败:uses-sdk:minSdkVersion 14
- 为什么Android工作室说“等待调试器”如果我不调试?
- 如何检查我的EditText字段是否为空?
- Android从图库中选择图像
- 后台任务,进度对话框,方向改变-有任何100%工作的解决方案吗?
- Android:垂直对齐多行EditText(文本区域)
- Android无尽列表
- Android room persistent: AppDatabase_Impl不存在
- Java的String[]在Kotlin中等价于什么?
- 错误:执行失败的任务':app:compileDebugKotlin'。>编译错误。详细信息请参见日志
- 在Android中使用URI生成器或使用变量创建URL
- 缩放图像以填充ImageView宽度并保持纵横比