в чем разница между kotlin сопрограммами и классами asyncTask и multiThread - PullRequest
0 голосов
/ 06 апреля 2020

Недавно я прочитал о Kotlin сопрограммах, и теперь мне интересно, в чем разница между классом asyncTask и многопоточным программированием и сопрограммами? в какой ситуации я должен использовать каждый из них?

Ответы [ 2 ]

1 голос
/ 06 апреля 2020

AsyncTask было первым решением, предложенным Google в Android SDK для обработки работы в фоновом режиме, сохраняя при этом основной поток свободным от многих сложных операций. Фактически, AsyncTask позволяет выполнять сложную обработку асинхронно. По сравнению с классическим Java Thread, AsyncTask был каким-то специализированным, предоставляя обертки пользовательского интерфейса вокруг потоков, чтобы сделать работу разработчика более приятной, программируя асинхронно c. В то же время класс AsyncTask устарел, и рекомендуемый способ решения проблемы - использование сопрограмм.

Сопрограммы не являются новым представителем концепции Kotlin, фактически эта концепция существует во многих языках программирования (Go имеет Goroutines и Java предоставит нечто, называемое Fibers ). Основным преимуществом использования сопрограмм является простота кода, единственное, что отличает задачу / функцию syn c перед асин * задача / функция c, - это использование ключевого слова suspend, помещенного перед функцией. , Например, следующая функция выполняется синхронно:

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

, а следующая выполняется асинхронно из-за использования ключевого слова suspend:

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

Когда достигается функция suspend, программа не будет там блокироваться и будет go продолжать выполнение остального кода, но получит Continuation, который вернет значение, вычисленное приостановленной функцией, когда этот будет доступен.

1 голос
/ 06 апреля 2020

AsyncTask - абстрактный класс, и он должен быть разделен на подклассы. AsyncTask имеет 4 шага: onPreExecute, doInBackground, onProgressUpdate и onPostExecute. Они выполняются последовательно в одном фоновом потоке.

  • Если вы хотите получить URL или выполнить тяжелые вычисления в Android, вам необходимо использовать асинхронное c программирование.

  • они могут использоваться, когда существует небольшая задача для связи с основным потоком. для задач, которые используют несколько экземпляров параллельно.

Поток является параллельной единицей выполнения. У него есть свой стек вызовов. В потоках операционная система предпочтительно переключает запущенные потоки в соответствии со своим планировщиком.

  • они могут использоваться для задач, работающих параллельно. Многопоточность.

  • для задачи, в которой вы хотите контролировать использование ЦП относительно потока GUI.

Сопрограммы используются для написания асинхронного кода, который будет выглядеть как обычный последовательный код. они могут обеспечить очень высокий уровень параллелизма с минимальными издержками.

  • Они просты для чтения, в отличие от потоков они легковесны и в отличие от AsyncTask, многие из них могут работать одновременно.
...