StateFlow dan SharedFlow
Sediakan state reaktif dari aplikasi Anda.
StateFlow dan SharedFlow 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.
Flow Panas
Berbeda dari Flow dingin, StateFlow dan SharedFlow bersifat panas: keduanya ada secara independen dari pengumpul dan dapat dibagikan kepada banyak pengumpul.
StateFlow adalah Penampung Status
StateFlow selalu menyimpan satu nilai saat ini. Pengumpul baru langsung menerima nilai terbaru tersebut. StateFlow sangat cocok untuk status antarmuka pengguna.
private val _count = MutableStateFlow(0)
val count: StateFlow<Int> = _count.asStateFlow()Memperbarui StateFlow
Tetapkan .value secara langsung atau gunakan update untuk operasi baca-ubah-tulis atomik.
_count.value++
// or, atomically:
_count.update { it + 1 }StateFlow Menggabungkan dan Menghapus Duplikasi
StateFlow hanya menyimpan nilai terbaru (konflasi) dan tidak memancarkan nilai jika nilai baru sama dengan nilai lama. Hal ini menghindari pembaruan antarmuka pengguna yang tidak diperlukan.
SharedFlow untuk Peristiwa
SharedFlow tidak wajib memiliki nilai saat ini dan dapat memutar ulang sejumlah emisi sebelumnya sesuai konfigurasi. SharedFlow cocok untuk peristiwa sekali jalan seperti navigasi atau menampilkan snackbar.
private val _events = MutableSharedFlow<String>()
val events: SharedFlow<String> = _events.asSharedFlow()Memancarkan Peristiwa
Pancarkan data ke SharedFlow dari dalam coroutine.
fun onSave() {
viewModelScope.launch {
_events.emit("Saved!")
}
}Mengapa Bukan StateFlow untuk Peristiwa
StateFlow menyimpan nilai terakhir, sehingga pengumpul yang berlangganan ulang (setelah rotasi) akan menerima kembali peristiwa lama dan, misalnya, melakukan navigasi dua kali. SharedFlow secara bawaan tidak memutar ulang peristiwa.
Mengonfigurasi SharedFlow
Sesuaikan replay dan extraBufferCapacity untuk mengatur perilaku penyanggaan dan tekanan balik.
MutableSharedFlow<String>(
replay = 0,
extraBufferCapacity = 1
)Mengonversi Flow Dingin Menjadi StateFlow
Gunakan stateIn untuk mengubah aliran hulu yang dingin menjadi StateFlow bersama yang berada dalam ruang lingkup ViewModel.
val uiState = repo.stream()
.stateIn(
viewModelScope,
SharingStarted.WhileSubscribed(5000),
UiState()
)Memilih di Antara Keduanya
- StateFlow → status layar saat ini (selalu memiliki nilai).
- SharedFlow → peristiwa sementara (dijalankan sekali).
Mengumpulkan Keduanya
Kumpulkan StateFlow dengan collectAsStateWithLifecycle di Compose; kumpulkan peristiwa SharedFlow di dalam LaunchedEffect agar ditangani sekali.
LaunchedEffect(Unit) {
vm.events.collect { msg -> showSnackbar(msg) }
}Pemeriksaan Singkat
Uji pemahaman Anda tentang StateFlow dan SharedFlow.
Rangkuman
Anda telah mempelajari:
- StateFlow adalah penampung status hot yang melakukan penggabungan nilai dan memiliki nilai saat ini.
- SharedFlow adalah aliran peristiwa hot dengan pemutaran ulang yang dapat dikonfigurasi.
- Gunakan StateFlow untuk status dan SharedFlow untuk peristiwa satu kali.
stateInmengonversi aliran cold menjadi StateFlow.
Belajar Kotlin dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 36
- Pelajaran
- 152
Pertanyaan yang Sering Diajukan
Apakah pelajaran “StateFlow dan SharedFlow” gratis?
Ya — teks lengkap “StateFlow dan SharedFlow” 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 “StateFlow dan SharedFlow”?
Sediakan state reaktif dari aplikasi Anda. 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 “StateFlow dan SharedFlow” 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