Coroutines adalah fitur Kotlin untuk menulis kode asynchronous (non-blocking) dengan cara yang terlihat seperti kode synchronous (sequential). Coroutine jauh lebih ringan dari thread — Anda bisa menjalankan ribuan coroutine tanpa masalah performa.
Masalah utama dengan callback dan thread tradisional:
Callback Hell — kode bertingkat yang sulit dibaca
Thread berat — setiap thread membutuhkan ~1MB stack memory
Kode sulit dipahami — async logic tersebar di berbagai callback
Coroutine menyelesaikan semua masalah ini dengan memungkinkan Anda menulis kode async seolah-olah kode sync.
Coroutine vs Thread
Aspek
Coroutine
Thread
Bobot
🟢 Sangat ringan (~100 bytes)
🔴 Berat (~1MB per thread)
Jumlah
Bisa ribuan sekaligus
Ratusan saja sudah berat
Penulisan
🟢 Seperti kode sync
🟡 Callback / Handler
Memory
🟢 Heap (sedikit)
🔴 Stack (banyak)
Cancel
🟢 Built-in cooperative
🔴 Manual & kompleks
Error
🟢 try-catch biasa
🟡 UncaughtExceptionHandler
Diagram: Thread (1 atau lebih)
2. Suspend Function
Suspend function adalah fungsi yang bisa di-pause (suspend) dan di-resume tanpa memblokir thread. Suspend function hanya bisa dipanggil dari dalam coroutine atau suspend function lainnya.
Diagram
12. Quiz Pemahaman
Uji pemahaman Anda tentang Kotlin Coroutines dengan quiz singkat berikut!
1. Apa perbedaan utama launch dan async?
a) launch lebih cepat dari async
b) launch tidak mengembalikan nilai, async mengembalikan Deferred<T>
c) launch untuk synchronous, async untuk asynchronous
d) Keduanya identik
2. Kapan menggunakan Dispatchers.IO?
a) Untuk komputasi berat (CPU intensive)
b) Untuk operasi jaringan dan file I/O
c) Untuk update UI
d) Untuk operasi yang sangat cepat
3. Apa fungsi suspend keyword pada fungsi?
a) Membuat fungsi berjalan di background thread
b) Menandai bahwa fungsi bisa di-pause dan di-resume tanpa memblokir thread
c) Membuat fungsi menjadi asynchronous
d) Membuat fungsi berjalan lebih cepat
4. Apa perbedaan StateFlow dan SharedFlow?
a) StateFlow selalu memiliki nilai saat ini, SharedFlow tidak
b) Keduanya identik
c) StateFlow lebih cepat dari SharedFlow
d) SharedFlow deprecated, harus pakai StateFlow
5. Mengapa GlobalScope tidak direkomendasikan di Android?
a) Karena terlalu lambat
b) Karena coroutine hidup lebih lama dari lifecycle komponen, bisa menyebabkan memory leak