我一直在想,使用Handler
(Looper.getMainLooper()
)或启动一个新的协程作业来在主线程上做一些小事情(如更新视图)是否是一种更好的方法。
经办人:
val uiHandler = Handler(Looper.getMainLooper())
fun foo() {
uiHandler.post {
someView.update()
}
}
协同程序
fun foo() {
lifecycleScope.launch {
someView.update()
}
}
我真的不知道,也无法在互联网上找到任何相关的东西,但我很想获得这些知识。
1条答案
按热度按时间vhipe2zx1#
你可以同时做这两件事,但我认为通常的做法是使用协程。我不认为处理程序在默认情况下是生命周期感知的,但是如果视图或活动被破坏,协程将被取消。很多库都使用了suspend函数,所以你必须使用协程。
基于this,协程将任务添加到事件循环中,就像处理程序一样。我想知道协程在内部是如何工作的,并发现了一篇使用
mainHandler.post { continuation.resume(value) }
来调度协程的this文章,所以我怀疑性能上会有很大的差异。