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) }
- 无法使用Gradle将Android Kotlin Project上传到Fabric Beta
- 在kotlin中使用Interface时获取平台声明冲突
- Kotlin中的super.onCreate(saveInstanceState)中的illegalArgumentsException
- Android Kotlin计算速度(时间)
- 在kotlin使用房间作为单身人士
- 在Kotlin中传递和使用函数作为构造函数参数
- Kotlin Dokka – 在android studio中找不到Dokka任务
- 有问题从fragmentManager / MapFragment移动到supportfragmentManager / SupportMapFragment
- Android库模块在使用纯Kotlin模块的类时不会编译