viewModelScope dan Dispatchers
Jalankan kerja pada bebenang yang betul.
viewModelScope dan Dispatchers ialah pelajaran Android Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Android Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Android Academy merangkumi sejumlah 4 pelajaran.
Skop Sedar Kitar Hayat
Android menyediakan skop terbina dalam yang membatalkan korutin secara automatik:
viewModelScope— dibatalkan apabila ViewModel dibersihkan.lifecycleScope— terikat pada kitar hayat Activity/Fragment.
Menggunakan viewModelScope
Mulakan kerja data dalam viewModelScope. Apabila ViewModel dibersihkan, korutin 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 Bukan GlobalScope
Elakkan GlobalScope: korutinnya hidup sepanjang aplikasi dan tidak pernah terikat pada kitar hayat, lalu menyebabkan kebocoran serta kerja yang berterusan selepas skrin ditutup.
Apakah Dispatcher?
Dispatcher menentukan bebenang (atau kumpulan bebenang) yang digunakan oleh korutin. Pemilihan yang betul membebaskan bebenang utama.
Dispatcher Standard
Dispatchers.Main— bebenang UI.Dispatchers.IO— untuk I/O rangkaian dan cakera.Dispatchers.Default— untuk kerja yang intensif CPU.
viewModelScope Lalai kepada Main
viewModelScope dilancarkan pada Dispatchers.Main. Ini sesuai untuk mengemas kini keadaan, tetapi kerja berat hendaklah dialihkan daripadanya.
Beralih dengan withContext
Gunakan withContext untuk menjalankan blok pada dispatcher yang berbeza, kemudian kembali kepada pemanggil.
suspend fun loadFile(): String =
withContext(Dispatchers.IO) {
File("data.txt").readText()
}Fungsi Selamat untuk Main
Fungsi adalah selamat untuk main jika ia selamat dipanggil dari bebenang utama kerana fungsi itu bertukar secara dalaman. Repositori hendaklah selamat untuk main supaya pemanggil tidak perlu bimbang tentang bebenang.
class Repo {
suspend fun getUsers() =
withContext(Dispatchers.IO) { dao.getAll() }
}Room dan Retrofit Selamat untuk Main
Berita baik: kaedah DAO suspend Room dan panggilan suspend Retrofit sudah dijalankan di luar bebenang utama. Biasanya anda tidak memerlukan withContext yang nyata untuknya.
Kerja CPU pada Default
Untuk pengiraan berat seperti mengisih senarai yang sangat besar atau menghuraikan data, gunakan Dispatchers.Default supaya UI tidak tersekat-sekat.
val sorted = withContext(Dispatchers.Default) {
bigList.sortedBy { it.score }
}Menyuntik Dispatcher
Untuk kebolehujiannya, suntik dispatcher dan bukannya menetapkannya secara terus. Ini membolehkan ujian menggantikannya dengan dispatcher ujian.
class Repo(
private val io: CoroutineDispatcher = Dispatchers.IO
) {
suspend fun load() = withContext(io) { /* ... */ }
}Semakan Pantas
Uji pemahaman anda tentang skop dan dispatcher.
Imbas Kembali
Anda telah mempelajari:
viewModelScopemembatalkan korutin apabila ViewModel dibersihkan.- Elakkan
GlobalScope. - Pilih dispatcher: Main (UI), IO (rangkaian/cakera), Default (CPU).
withContextmenukar bebenang; sasarkan fungsi yang selamat untuk main.
Pelajari Kotlin dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 36
- Pelajaran
- 152
Soalan Lazim
Adakah pelajaran “viewModelScope dan Dispatchers” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Android Academy, termasuk “viewModelScope dan Dispatchers”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Android Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “viewModelScope dan Dispatchers”?
Jalankan kerja pada bebenang yang betul. Anda berlatih Android Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Android Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Android Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “viewModelScope dan Dispatchers” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Android Academy ini?
Ya. Setiap pelajaran Android Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Asas Korutin dan Skop
- viewModelScope dan Dispatchers
- Asas Kotlin Flow
- StateFlow dan SharedFlow