作为标题,在Kotlin中是否有方法在延迟(例如1秒)后调用函数?
当前回答
需要导入以下两个库:
import java.util.*
import kotlin.concurrent.schedule
然后这样使用它:
Timer().schedule(10000){
//do something
}
其他回答
你可以启动一个协程,延迟它,然后调用函数:
/*GlobalScope.*/launch {
delay(1000)
yourFn()
}
如果你在类或对象的外部,让协程在那里运行,否则建议在周围的类中实现CoroutineScope,这允许在必要时取消与该作用域关联的所有协程。
如果你在一个带有viewModel作用域的片段中,你可以使用Kotlin协程:
myViewModel.viewModelScope.launch {
delay(2000)
// DoSomething()
}
你可以使用日程安排
inline fun Timer.schedule(
delay: Long,
crossinline action: TimerTask.() -> Unit
): TimerTask (source)
例子(谢谢@Nguyen Minh Binh -在这里找到它:http://jamie.mccrindle.org/2013/02/exploring-kotlin-standard-library-part-3.html)
import java.util.Timer
import kotlin.concurrent.schedule
Timer("SettingUp", false).schedule(500) {
doSomething()
}
如果你在寻找通用用法,下面是我的建议:
创建一个名为Run的类:
class Run {
companion object {
fun after(delay: Long, process: () -> Unit) {
Handler().postDelayed({
process()
}, delay)
}
}
}
像这样使用:
Run.after(1000, {
// print something useful etc.
})
val timer = Timer()
timer.schedule(timerTask { nextScreen() }, 3000)
推荐文章
- 警告:API ' variable . getjavacompile()'已过时,已被' variable . getjavacompileprovider()'取代
- 安装APK时出现错误
- 碎片中的onCreateOptionsMenu
- TextView粗体通过XML文件?
- 如何使线性布局的孩子之间的空间?
- DSL元素android.dataBinding。enabled'已过时,已被'android.buildFeatures.dataBinding'取代
- ConstraintLayout:以编程方式更改约束
- PANIC: AVD系统路径损坏。检查ANDROID_SDK_ROOT值
- Kotlin中惯用的登录方式
- 如何生成字符串类型的buildConfigField
- Recyclerview不调用onCreateViewHolder
- Android API 21工具栏填充
- Android L中不支持操作栏导航模式
- 如何在TextView中添加一个子弹符号?
- PreferenceManager getDefaultSharedPreferences在Android Q中已弃用