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
, который вернет значение, вычисленное приостановленной функцией, когда этот будет доступен.