kotlin协程与asyncTask类和multiThread之间有什么区别

问题描述 投票:0回答:2

我最近读过Kotlin协程,现在,我想知道asyncTask类与多线程编程和协程之间有什么区别?在什么情况下我应该使用每个?

multithreading kotlin android-asynctask coroutine
2个回答
1
投票

AsyncTask是Google在Android SDK中提出的第一手解决方案,目的是在后台处理工作,同时使主线程免于许多复杂的操作。实际上,AsyncTask使您可以异步方式进行复杂的处理。与经典Java Thread相比,AsyncTask在某种程度上是专门的,它为线程提供UI封装,以便以异步方式进行编码,从而为开发人员提供更愉快的体验。同时不推荐使用AsyncTask类,推荐的解决方法是使用协程。

Coroutines并不是Kotlin提出的新概念介绍器,实际上,该概念存在于许多编程语言中(Go具有Goroutines,而Java将提供称为Fibers的东西)。使用协程的主要优点是代码简单,在异步任务/功能面前唯一可以区分同步任务/功能的地方是在函数前面使用suspend关键字。例如,以下函数以同步方式执行:

fun doSomething() = println("Print something")

由于使用suspend关键字,以异步方式执行以下命令:

suspend fun doSomething()  = println("Print something")

[到达suspend函数时,该程序不会在此处阻塞,并且会继续运行其余代码,但是会收到一个Continuation,它将返回由暂停函数计算出的值。将可用。


1
投票

AsyncTask是抽象类,必须将其子类化。 AsyncTask包含4个步骤:onPreExecute,doInBackground,onProgressUpdate和onPostExecute。它们在单个后台线程上串行执行。

  • 如果要在Android中获取URL或执行重量级计算,则必须使用异步编程。

  • 当有小任务要与主线程通信时,可以使用它们。对于并行使用多个实例的任务。

Thread是并发执行单元。它具有自己的调用堆栈。使用线程,操作系统会根据其调度程序抢先切换正在运行的线程。

  • 它们可用于多线程并行运行的任务。

  • 用于要控制相对于GUI线程的CPU使用率的任务。

Coroutines用于编写看起来像普通顺序代码的异步代码。它们可以以很少的开销提供非常高的并发级别。

  • 它们易于阅读,与线程不同,它们是轻量级的,与AsyncTask不同,它们中的许多可以同时运行。
© www.soinside.com 2019 - 2024. All rights reserved.