Kotlin:如何使用扩展功能延迟运行一个函数

我试图找出如何使用扩展功能延迟运行任何方法,但似乎无法弄清楚。

我想下面的东西,我有一个函数,我想要一个处理程序延迟执行一定timeInterval:

functionX().withDelay(500) functionY().withDelay(500) private fun Unit.withDelay(delay: Int) { Handler().postDelayed( {this} , delay)} private fun Handler.postDelayed(function: () -> Any, delay: Int) { this.postDelayed(function, delay)} 

任何人?

你应该把扩展的功能类型,而不是Unit

 fun functionX() {} fun functionY() {} private fun (() -> Any).withDelay(delay: Int) { Handler().postDelayed(this , delay) } 

用法:

 ::functionX.withDelay(500) ::functionY.withDelay(500) 

在这里, ::functionX是对全局函数functionX的引用 。

另一种方法是声明一个像这样的顶级(即全局)函数:

 fun withDelay(delay : Long, block : () -> Unit) { Handler().postDelayed(Runnable(block), delay) } 

那么你可以从任何地方这样调用它:

 withDelay(500) { functionX() } 

例如,你可以声明你的全局变量,如:

 private var handler: Handler = Handler() private lateinit var runnableNewUrlBackground: Runnable 

并且还将该函数声明为全局函数

 init { runnableNewUrlBackground = Runnable { // Your function code here myCustomFun(); } } 

然后,当你想要调用这个,只需使用:

 handler.postDelayed(runnableNewUrlBackground, YOUR_DESIRED_TIME) 

或者我也喜欢这个版本:

把你想要在{…}中执行的任何代码块

 { invokeSomeMethodHere() }.withDelay() 

并有一个延迟功能,在一定的延迟后调用Runnable:

 fun <R> (() -> R).withDelay(delay: Long = 250L) { Handler().postDelayed({ this.invoke() }, delay) }