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:
viewModelScopemembatalkan coroutine saat ViewModel dibersihkan.- Hindari
GlobalScope. - Pilih dispatcher: Main (antarmuka pengguna), IO (jaringan/disk), Default (CPU).
withContextmengganti 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
- Dasar-Dasar Coroutine dan Cakupan
- viewModelScope dan Dispatcher
- Dasar-Dasar Kotlin Flow
- StateFlow dan SharedFlow