fbpx

Course Content

Total learning: 7 lessons Time: 2 hours

Введение

Асинхронное программирование необходимо для реализации сложной бизнес-логики в современных приложениях. Написание кода, который работает асинхронно, позволяет ускорить работу приложений и выполнить гораздо больше за тоже время, заставляя работать параллельно несколько процессоров. Такой подход для мобильных приложений позволяет выносить длительную и занимающую много ресурсов работу из главного потока (UI-потока) в фоновый поток. Таким образом в мобильном приложении можно избежать ошибки ANR (Application Not Responding) – то есть когда главный поток приложения занимается обработкой данных и не отвечает на действия пользователя более 5 минут, исключить зависания и в целом сделать опыт использования приложения для пользователя максимально приятным.

В Android существует немало механизмов, позволяющих реализовать асинхронное взаимодействие,  однако некоторые из них уже давно устарели и не используются, например AsyncTask – из-за количество бойлерплэйт кода и потенциальных проблем с утечкой памяти, является официально устаревшим подходом. Другие, как например RxJava – являются очень мощным инструментом для параллельного программирования, однако требуют от разработчика значительных временных ресурсов для полного понимания.

И вот JetBrains анонсировала новую фичу, которая известна как coroutines (coroutines является экспериментальной функцией в Kotlin 1.1+).

Coroutines упрощает асинхронное программирование, пряча всю сложность внутри библиотек. Эта идея зародилась в далёком 1967 году в языке программирования Simula. Поначалу методов было всего несколько: detach и resume (следовательно, они позволяли останавливать и запускать исполнение).

Тем не менее, идея была отброшена, когда появились потоки. С одной стороны, имеет смысл запускать асинхронную задачу в отдельном потоке. Однако в некоторых случаях, это решение не будет эффективным. Например, в таких:

  1. Оба потока и переключение между ними дорого обходятся;
  2. Создание тысяч потоков может существенно нагрузить систему;
  3. Ваш код должен использовать только один поток (JavaScript, например);
  4. Вы не хотите использовать потоки, потому что у вас много «mutable state»;
  5. Вы можете изменить пользовательский интерфейс только из его потока (как в Android), поэтому легко ошибиться.

Kotlin Coroutines –  новый мощный способ для написания асинхронного кода. Kotlin Coroutines позволяют писать асинхронный код в более привычном стиле – так же как вы пишите обычный последовательный код. Последовательное написание кода более привычно и меньше подвержено ошибкам.

В этом туториале вы научитесь основам работы с Kotlin Coroutines на примере небольшого приложения, умеющего скачивать картинку из сети и применять различные фильтры как в инстраграм. Загрузку картинки и трансформацию изображения мы будем делать асинхронно и использовать для этого сoroutines.

После прохождения туториала вы поймете:

  • Как Kotlin Coroutines работают внутри.
  • Как создать coroutines.
  • Обработка ошибок через coroutines.