我一直想知道是否使用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开发中,使用协程和处理