Asynchronous in Android with Kotlin Coroutines

Wahyu Permadi
Tunaiku Tech
Published in
2 min readOct 21, 2019
url : https://kotlinlang.org/assets/images/twitter-card/kotlin_800x320.png

Kotlin Coroutines merupakan sebuah library yang dibuat untuk mengatur proses threading agar tidak mem-block Main-Thread (Non-Blocking UI Thread). Hal ini bertujuan agar aplikasi Android yang dibuat tidak mengalami freeze ketika melakukan fetching data dari API maupun operasi lainnya yang memakan waktu cukup lama. Kotlin Coroutines pada penerapannya menggunakan suspend function, suspend function sendiri merupakan fungsi yang dapat berjalan tanpa melakukan blocking terhadap MainThread. Menjalankan suspend function harus dilakukan didalam block Coroutine Scope.

Dalam penerapannya, Kotlin Coroutines tidak serta merta dapat dijalankan hanya di background thread. Hal ini dapat disesuaikan dengan kebutuhan yang kita perlukan, untuk mengatur threading pada Coroutines diperlukan CoroutineDispatcher. Bagian dari CouroutineDispatcher adalah sebagai berikut :

  1. Dispatchers.Main
    Dispatchers.Main
    digunakan untuk proses yang berhubungan dengan UI-Thread (Main-Thread), seperti melakukan update data ke UI, manipulasi layout (show and hide loading), dan sebagainya.
  2. Dispatchers.IO
    Dipatchers.IO digunakan untuk proses yang tidak ada hubungannya dengan UI dan memerlukan waktu yang tidak tentu seperti proses fetching data melalaui API, CRUD ke local database (Room, GreenDAO, dsb). Penggunaan Dispatchers.IO bertujuan agar tidak terjadi blocking terhadapat UI-Thread sehingga mengurangi terjadinya freeze pada aplikasi Android.
  3. Dispatchers.Unconfined
    Dispatchers.Unconfined
    digunakan pada saat kita melakukan Unit-Testing, karena Dispatchers.Unconfined tidak terbatas pada thread tertentu.

Okeh sekarang lanjut ke implementasi Kotlin Coroutines pada aplikasi MovieDB, pada sudah tidak asing lagi dengan MovieDB Apps 😂. Sebelumnya persiapkan dulu dependencies yang diperlukan seperti dibawah ini.

// Retrofit
implementation "com.squareup.retrofit2:retrofit:2.6.1"
implementation "com.squareup.retrofit2:converter-gson:1.3.2"
implementation "com.squareup.okhttp3:logging-interceptor:3.12.1"
implementation "com.google.code.gson:gson:2.8.5"
// Coroutines
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.2"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.2"

Sekedar informasi, jangan lupa sambil ngopi ya gaes biar lebih santuy hehehe. Next kita buat ApiService seperti dibawah ini.

ApiService.kt

Pada ApiService yang telah dibuat, sudah langsung menggunakan suspend function, tidak lagi menggunakan Deffered. Hal ini dikarenakan Deffered sudah DEPRECATED dan pada Retrofit 2.6 keatas sudah build-in suspend function. Disini gw anggap kalian sudah bisa setup Retrofit dan OkHttp, jadi gw lanjut aja bagaimana cara fetching API dengan Corotuines, seperti dibawah ini.

MoviesPresenter.kt

Pada MoviesPresenter terdapat CoroutineScope yang berjalan pada Dispatchers.Main (uiDispatcher()) dan fetching data dijalankan pada Dispatchers.IO (bgDispatcher()). Dispatchers.Main (uiDispatcher()) berfungsi untuk mengirimkan data dari ke UI dan melakukan manipulasi UI seperti show() dan hide() progressBar(). Untuk lebih jelaskan terkait penggunaan Kotlin Coroutines baik untuk UnitTesting bisa dilihat di bawah ini.

Semoga artikel ini bermanfaat, dan mohon maaf jika kata-kata yang saya buat masih belum baik dan kurang komunikatif, karena saat ini saya sedang belajar bagaimana menulis sebuah artikel. Terimakasih 🙏

--

--

Wahyu Permadi
Tunaiku Tech

Android and Kotlin Enthusiast | Software Engineer @Grab