Mengenal Kotlin Coroutine di Android

Android 8 Agt 2021

Coroutine adalah lightweight threads yang dapat kita gunakan untuk menyederhanakan kode yang dieksekusi secara asynchronous. Di aplikasi Android, Coroutine dapat kita gunakan untuk tugas yang berjalan lama seperti pengambilan data di internet, database dan perhitungan kompleks yang dapat memblokir Main Thread sehingga membuat aplikasi mengalami tidak responsif atau bahkan crash.

Kita akan membuat project sederhana untuk mempelajari cara kerja Coroutine di dalam aplikasi Android. Buka Android Studio dan buat project baru → pilih Empty Activity dan masukkan konfigurasi seperti berikut :

  • Name : LearnCoroutine
  • Package Name : com.teknorial.learncoroutine
  • Language : Kotlin
  • Minimum SDK : API 21: Android 5.0 (Lollipop)

Kemudian klik Finish.

setelah project berhasil di-build. Tambahkan coroutine ke dalam dependecies di file build.gradle(Module: LearnCoroutine.app)

implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0'

Kemudian tekan sync now dan tunggu sampai proses build selesai.

Sekaran kita akan mengecek thread pertama yang berjalan saat aplikasi muncul. Buka MainActivity dan modifikasi seperti kode di bawah.

package com.teknorial.learncoroutine

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log

val TAG = "MyMainActivity"

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        Log.d(TAG, "Hello dari thread : ${Thread.currentThread().name}")

    }
}

Jalankan Aplikasi (Shift + F10) , kemudian buka LogCat dan search "MyMainActivity" untuk fokus pada hasil dari Log yang kita buat. Kita akan menemukan bahwa thread yang pertama kali berjalan adalah main.

logcat main thread

Sekarang kita akan menggunakan coroutine dan membuat function tersebut delay selama 3 detik. Kita juga mengecek apakah function coroutine akan menganggu main thread. Buka MainActivity dan modifikasi kembali seperti kode di bawah.

package com.teknorial.learncoroutine

import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch

val TAG = "MyMainActivity"

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        CoroutineScope(Dispatchers.Default).launch {
            //delay : hanya membuat coroutine tertidur, tidak keseluruhan thread
            delay(3000)

            Log.d(TAG, "Hello dari thread : ${Thread.currentThread().name}")

        }

        Log.d(TAG, "Hello dari thread : ${Thread.currentThread().name}")

    }
}

Jalan aplikasi kembali (Shift + F10) . Dalam LogCat kiata akan menemukan bahwa main thread akan tetap mulai di awal tanpa terganggu dari coroutine yang delay selama 3 detik. Kita juga melihat coroutine tidak berjalan di main thread namun berjalan pada thread yang bernama DefaultDispatcher-worker-1.

logcat coroutine thread

Coroutine sebenarnya memiliki empat scope yang masing-masing memiliki fungsi berberbeda, namun pada tutorial ini kita hanya fokus mengenal dasar dari kotlin coroutine.

Sekarang kita akan coba menambah function di dalam coroutine. Kita juga mencoba menambahkan delay seolah-olah ini merupakan function yang membutuhkan waktu untuk mengambil data dari server. Modifikasi MainActivity seperti pada kode di bawah.


package com.teknorial.learncoroutine

import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch

val TAG = "MyMainActivity"

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        CoroutineScope(Dispatchers.Default).launch {
            //delay : hanya membuat coroutine tertidur, tidak keseluruhan thread
            delay(3000)

            Log.d(TAG, "Hello dari thread : ${Thread.currentThread().name}")

            val data = getDataFromServer()
            Log.d(TAG, data)
        }

        Log.d(TAG, "Hello dari thread : ${Thread.currentThread().name}")

    }

    suspend fun getDataFromServer(): String {
        delay(2000)
        return "Hello ini data dari server"
    }

}

Jalan aplikasi kembali dan kita akan menemukan bahwa function getDataFromServer akan return nilai setelah delay dua detik sejak function tersebut di panggil dalam CoroutineScope. Perhatikan juga untuk menggunakan delay di dalam function wajib menggunakan keyword suspend sebelum tulisan fun.

logcat suspend function

Demikian tutorial Mengenal Coroutine Kotlin di Android. Kita telah mengenal coroutine dan melakukan simulasi di aplikasi Android. Coroutine akan sering kita gunakan dalam aplikasi Android dengan library seperti retrofit untuk pengelolaan data di internet dan Room untuk pengelolaan database lokal. Jika kamu masih kesulitan dalam mengikuti tutorial ini, silahkan bertanya di kolom komentar di bawah. Semoga artikel ini bermanfaat. Terima kasih.

Source Code : https://github.com/rflash95/LearnCoroutine

Tag