Android Kotlin协程与线程

Android Kotlin协程与线程,android,kotlin,kotlin-coroutines,Android,Kotlin,Kotlin Coroutines,我目前正在开发用kotlin编写的Android应用程序。我在不同的地方看到两件东西,我想知道它们之间的区别。有时函数是这样编写的: fun functionThread() = Thread{ doSomeWork() }.start 所以如果我理解正确的话,doSomeWork()是在创建的新线程中执行的 另一方面,有时他们使用协同程序: fun functionCoroutine(){ CoroutineScope(Job() + Dispatchers.IO).launch {

我目前正在开发用kotlin编写的Android应用程序。我在不同的地方看到两件东西,我想知道它们之间的区别。有时函数是这样编写的:

fun functionThread() = Thread{
   doSomeWork()
}.start
所以如果我理解正确的话,doSomeWork()是在创建的新线程中执行的

另一方面,有时他们使用协同程序:

fun functionCoroutine(){
 CoroutineScope(Job() + Dispatchers.IO).launch {
    doSomeWork()
   }
 }

这样,工作由协同程序完成。我想知道这两种方法之间最大的区别是什么,它们的优点和缺点是什么。我认为现在的协程几乎总是比线程更好的选择,因为它们更轻,线程更重。有人能再给我解释一下吗。

你的问题缺乏背景,无法解释为什么要使用这两种方法。通常,在编写“顺序”代码(避免回调模式)时,协程支持取消、线程切换、暂停(等待结果)。我只能想象线程在某些情况下对java互操作有用,而java互操作并不容易与协同程序兼容。所以线程与协同程序相比几乎是“不推荐的”,对吗?不是不推荐的,只是一个需要更多知识和注意才能正确使用的较低级别的功能。就像OpenGL并没有因为可以使用Android视图而被弃用一样,Android视图最终是一个功能更加丰富的抽象。@Tenfour04非常好地解释了视图和抽象示例。我只想指出,使用没有协同路由的线程几乎总是会带来更糟糕的性能结果(协同路由对于内存来说要轻得多)。所以线程通常是第二个使用的解决方案,第一个也是最好的是协程。这是我在提问之前的观点,我只是想从一些更有经验的人那里得到证实,比如youCoroutines,他们仍然在幕后使用线程。它们很轻,因为有一个线程池。如果您一次只执行几个任务,您将看不到线程池的好处。