Flow, StateFlow, SharedFlow — hot vs cold
Flow — asinxron dəyərlər axınıdır: suspend funksiya bir dəyər qaytarır, Flow isə ardıcıllıq emit edir.
Əsas bölgü — cold vs hot:
- Cold flow (adi
flow { }) — hər collector üçün yenidən başlayır. Collector yoxdursa, heç nə icra olunmur. Nümunə: Room-unFlowqaytaran sorğusu. - Hot flow (
StateFlow,SharedFlow) — collector-lardan asılı olmayaraq yaşayır və emit edir; collector qoşulanda axının "ortasına" düşür.
StateFlow — həmişə cari dəyəri olan hot flow: value ilə oxunur, yeni collector dərhal son dəyəri alır, ardıcıl təkrar dəyərləri buraxır (conflation + distinct). UI state üçün standartdır.
SharedFlow — dəyər saxlamayan, konfiqurasiya edilə bilən hot flow (replay, extraBufferCapacity). Birdəfəlik hadisələr (navigasiya, snackbar) üçün istifadə olunur.
| Xüsusiyyət | Flow (cold) | StateFlow | SharedFlow |
|---|---|---|---|
| Cari dəyər | Yoxdur | Həmişə var (initial tələb olunur) | Yoxdur (replay konfiqurasiya olunur) |
| Collector-suz işləyir? | Xeyr | Bəli | Bəli |
| Təkrar dəyər emit edir? | Bəli | Xeyr (equals ilə süzülür) | Bəli |
| Tipik istifadə | Repository/DB axınları | UI state | Birdəfəlik event-lər |
Müsahibə tələsi — event-lər üçün StateFlow: snackbar mesajını StateFlow-da saxlasan, ekran döndükdə yeni collector son dəyəri yenidən alır və snackbar təkrar görünür. Birdəfəlik event-lər üçün SharedFlow(replay = 0) və ya Channel işlədilir. UI-da toplama isə repeatOnLifecycle(Lifecycle.State.STARTED) içində olmalıdır — yoxsa arxa planda da collect davam edir.
🛠 Tapşırıq
Bir MutableStateFlow<String> və bir MutableSharedFlow<String> (replay = 0) yarat.
- Hər ikisinə dəyər emit et, sonra collector qoş — hansının dəyəri gördüyünü qeyd et.
- StateFlow-a eyni dəyəri iki dəfə emit et — collector neçə dəfə işə düşür?
flow { }cold flow yaz, iki collector qoş və emissiyaların təkrarlandığını gör.
Bitdi sayılır: "snackbar mesajını niyə StateFlow-da saxlamaq olmaz" sualına öz təcrübənlə cavab verirsənsə.
📚 Mənbələr və sənədlər
- Asynchronous Flow — Kotlin sənədlərirəsmikotlinlang.org
- StateFlow və SharedFlow — Androidrəsmideveloper.android.com
- Android-də Flowrəsmideveloper.android.com