处理程序或启动协程作业以在主线程中执行某些操作



我一直想知道是否使用Handler(Looper.getMainLooper())或启动一个新的协程作业在主线程上做一些小事情,如更新视图是一个更好的方法。

处理程序:

val uiHandler = Handler(Looper.getMainLooper())
fun foo() {
uiHandler.post { 
someView.update()
}
}

协同程序

fun foo() {
lifecycleScope.launch {
someView.update()
}
}

我真的不知道,在网上也找不到任何相关的东西,但我很想获得这些知识。

您可以两者都做,但我认为通常的做法是使用协程。我不认为处理程序在默认情况下是生命周期感知的,但是如果视图或活动被销毁,协程将被取消。很多库都使用挂起函数,所以你必须使用协程。

在此基础上,协程将任务添加到事件循环中,就像处理程序一样。我想知道协程是如何在内部工作的,并发现这篇文章使用mainHandler.post { continuation.resume(value) }来调度协程,所以我怀疑会有很大的性能差异。

它们的作用是一样的。但是,如果我们要选择,我们应该考虑这些事实:

  • 在主线程上执行UI更新,协程建议。因为它在使用协程编码时具有更好的一致性。

  • 如果你想要更多的控制时间的东西,如延迟和张贴在Handler是更好的选择。

  • 最后在今天的android开发中,使用协程和处理

相关内容

  • 没有找到相关文章

最新更新