0Pricing
Android Academy · Pelajaran

viewModelScope dan Dispatcher

Jalankan pekerjaan pada thread yang tepat.

viewModelScope dan Dispatcher adalah pelajaran Android Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Android Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Android Academy mencakup 4 pelajaran total.

Ruang Lingkup yang Sadar Siklus Hidup

Android menyediakan ruang lingkup bawaan yang membatalkan coroutine secara otomatis:

  • viewModelScope—dibatalkan saat ViewModel dibersihkan.
  • lifecycleScope—terikat pada siklus hidup Activity/Fragment.

Menggunakan viewModelScope

Jalankan pekerjaan data dalam viewModelScope. Saat ViewModel dibersihkan, coroutine dibatalkan untuk Anda—tanpa pembersihan manual.

class UserViewModel(
    private val repo: UserRepository
) : ViewModel() {
    fun load() {
        viewModelScope.launch {
            val users = repo.getUsers()
            _uiState.value = UiState(users)
        }
    }
}

Mengapa Tidak Menggunakan GlobalScope

Hindari GlobalScope: coroutine di dalamnya hidup selama aplikasi berjalan dan tidak pernah terikat pada siklus hidup, sehingga menyebabkan kebocoran serta pekerjaan yang terus berjalan setelah layar ditutup.

Apa Itu Dispatcher?

Dispatcher menentukan thread (atau kumpulan thread) tempat coroutine berjalan. Memilih dispatcher yang tepat membuat thread utama tetap bebas.

Dispatcher Standar

  • Dispatchers.Main—thread antarmuka pengguna.
  • Dispatchers.IO—untuk I/O jaringan dan disk.
  • Dispatchers.Default—untuk pekerjaan yang intensif bagi CPU.

viewModelScope Secara Bawaan Menggunakan Main

viewModelScope menjalankan coroutine pada Dispatchers.Main. Hal ini baik untuk memperbarui status, tetapi pekerjaan berat sebaiknya dipindahkan dari dispatcher tersebut.

Beralih dengan withContext

Gunakan withContext untuk menjalankan blok pada dispatcher yang berbeda, lalu kembali ke pemanggil.

suspend fun loadFile(): String =
    withContext(Dispatchers.IO) {
        File("data.txt").readText()
    }

Fungsi yang Aman di Main

Suatu fungsi disebut aman di main jika aman dipanggil dari thread utama karena fungsi tersebut melakukan perpindahan secara internal. Repo sebaiknya aman di main agar pemanggil tidak perlu mengkhawatirkan thread.

class Repo {
    suspend fun getUsers() =
        withContext(Dispatchers.IO) { dao.getAll() }
}

Room dan Retrofit Aman di Main

Kabar baik: metode DAO suspend Room dan pemanggilan suspend Retrofit sudah berjalan di luar thread utama. Biasanya Anda tidak memerlukan withContext secara eksplisit untuk keduanya.

Pekerjaan CPU pada Default

Untuk komputasi berat seperti mengurutkan daftar yang sangat besar atau melakukan penguraian, gunakan Dispatchers.Default agar antarmuka pengguna tidak tersendat.

val sorted = withContext(Dispatchers.Default) {
    bigList.sortedBy { it.score }
}

Menyuntikkan Dispatcher

Agar mudah diuji, suntikkan dispatcher alih-alih menentukannya secara langsung. Dengan begitu, pengujian dapat menggantinya dengan dispatcher pengujian.

class Repo(
    private val io: CoroutineDispatcher = Dispatchers.IO
) {
    suspend fun load() = withContext(io) { /* ... */ }
}

Pemeriksaan Singkat

Uji pemahaman Anda tentang ruang lingkup dan dispatcher.

Rangkuman

Anda telah mempelajari:

  • viewModelScope membatalkan coroutine saat ViewModel dibersihkan.
  • Hindari GlobalScope.
  • Pilih dispatcher: Main (antarmuka pengguna), IO (jaringan/disk), Default (CPU).
  • withContext mengganti thread; upayakan fungsi yang aman di main.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “viewModelScope dan Dispatcher” gratis?

Ya — teks lengkap “viewModelScope dan Dispatcher” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Android Academy, upgrade ke CoddyKit PRO. Kursus Android Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “viewModelScope dan Dispatcher”?

Jalankan pekerjaan pada thread yang tepat. Kamu berlatih Android Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Android Academy?

Tidak diperlukan pengalaman sebelumnya. Android Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “viewModelScope dan Dispatcher” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Android Academy ini?

Ya. Setiap pelajaran Android Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Dasar-Dasar Coroutine dan Cakupan
  2. viewModelScope dan Dispatcher
  3. Dasar-Dasar Kotlin Flow
  4. StateFlow dan SharedFlow
← Kembali ke Android Academy