collectAsStateWithLifecycle
Kumpulkan flow dengan aman sesuai siklus hidup.
collectAsStateWithLifecycle adalah pelajaran Android Academy gratis di CoddyKit. Ini adalah pelajaran 4 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.
Mengumpulkan Aliran dengan Aman
Saat Composable mengumpulkan suatu aliran, idealnya Composable harus berhenti mengumpulkan saat layar berada di latar belakang dan melanjutkannya saat layar kembali.
Alat untuk ini adalah collectAsStateWithLifecycle().
Masalah dengan collectAsState
collectAsState() biasa terus mengumpulkan selama Composable berada dalam komposisi — bahkan saat aplikasi berada di latar belakang.
Hal ini dapat memboroskan sumber daya dan memproses pembaruan yang tidak dapat dilihat pengguna.
Gunakan collectAsStateWithLifecycle
Pengumpul yang sadar siklus hidup ini menjeda pengumpulan saat siklus hidup turun di bawah status target (STARTED secara bawaan) dan melanjutkannya saat kembali.
import androidx.lifecycle.compose.collectAsStateWithLifecycle
@Composable
fun Screen(vm: MyViewModel) {
val state by vm.uiState
.collectAsStateWithLifecycle()
Text(state.title)
}Dependensi
Dependensi ini berada dalam artefak androidx.lifecycle:lifecycle-runtime-compose. Tambahkan ke modul Anda agar impor dapat ditemukan.
// build.gradle (module)
implementation(
"androidx.lifecycle:lifecycle-runtime-compose:2.x.x"
)Status Minimum Bawaan: STARTED
Secara bawaan, pengumpulan aktif saat siklus hidup setidaknya berada pada STARTED — artinya layar terlihat. Saat layar masuk ke latar belakang (di bawah STARTED), pengumpulan ditangguhkan.
Menyesuaikan Status Minimum
Anda dapat mengubah ambang batas dengan minActiveState, misalnya menjadi RESUMED.
val state by vm.uiState.collectAsStateWithLifecycle(
minActiveState = Lifecycle.State.RESUMED
)Memasangkannya dengan StateFlow
Fitur ini bekerja sempurna dengan StateFlow yang Anda ekspos dari ViewModel. Aliran selalu memiliki nilai saat ini, sehingga pengumpulan ulang langsung menampilkan status terbaru.
private val _uiState = MutableStateFlow(UiState())
val uiState = _uiState.asStateFlow()Mengapa Ini Menghemat Pekerjaan
Jika aliran Anda menggerakkan komputasi yang mahal (memfilter daftar besar, mengubah aliran), menangguhkan pengumpulan di latar belakang berarti pekerjaan tersebut tidak berjalan saat pengguna sedang tidak melihat aplikasi.
Menggabungkan dengan viewModelScope
Di sisi produsen, ViewModel sering menjalankan aliran pemrosesan datanya dalam viewModelScope. Dengan stateIn, Anda bahkan dapat membuat sumber aliran berhenti saat tidak ada pengumpul.
val uiState = repository.stream()
.stateIn(
scope = viewModelScope,
started = SharingStarted.WhileSubscribed(5000),
initialValue = UiState()
)Penjelasan WhileSubscribed
WhileSubscribed(5000) mempertahankan sumber aliran selama 5 detik setelah pengumpul terakhir pergi. Hal ini mencegah pekerjaan dimulai ulang selama perubahan konfigurasi singkat, tetapi tetap menghentikannya saat pengguna benar-benar pergi.
Ringkasan Praktik Terbaik
Untuk layar Compose yang didukung ViewModel:
- Ekspos
StateFlow. - Kumpulkan dengan
collectAsStateWithLifecycle(). - Secara opsional, gunakan
stateIn(WhileSubscribed)pada sumber aliran.
Pemeriksaan Singkat
Uji pemahaman Anda tentang pengumpulan yang sadar siklus hidup.
Ringkasan
Anda telah mempelajari:
collectAsStateWithLifecycle()menjeda pengumpulan di latar belakang.- Ambang bawaan adalah STARTED, yang dapat disesuaikan melalui
minActiveState. - Padukan dengan
StateFlowdanstateIn(WhileSubscribed)untuk aliran pemrosesan yang efisien.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “collectAsStateWithLifecycle” gratis?
Ya — teks lengkap “collectAsStateWithLifecycle” 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 “collectAsStateWithLifecycle”?
Kumpulkan flow dengan aman sesuai siklus hidup. 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 4 dari 4.
Berapa lama pelajaran “collectAsStateWithLifecycle” 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
- Mengapa Menggunakan ViewModel?
- Menyediakan State dari ViewModel
- Siklus Hidup Android
- collectAsStateWithLifecycle