StateFlowとShareFlow:町における新しいホットストリームAPI
新しく導入されたものの周りにはかなりの宣伝があった
StateFlow
and SharedFlow
アンドロイドコミュニティ.これらは新しい小林です
Flow
エイプ.しかし、これらはありません(すなわち、データが生成されて、加入者があるとき、放出されます).これらは「熱い」ストリームのためです(すなわち、データはとにかく放出されます、そして、どんな活発な加入者もそれらを受け取ります).これがあなたを思い出させるならば
LiveData
これは別の“ホット”ストリームの実装であるためです.データはとにかくViewModelから発行され、ビュー内の任意の加入者はそれらの値を取得します.だから私たちは
LiveData
with StateFlow
? それは簡単ですか?そして、それは価値がありますか?ステータスフロー
API
StateFlow
とほとんど同じですLiveData
. あなたはMutableStateFlow
それはStateFlow
と同じMutableLiveData
ドライブLiveData
).class MyViewModel(private val repository: Repository) : ViewModel() {
private val userNameFlow = MutableStateFlow("") // 1.
val userName: StateFlow<String> = userNameFlow
init {
viewModelScope.launch {
userNameFlow.value = repository.fetchUserName()
}
}
}
ビューモデルclass MyActivity : AppCompatActivity() {
private val viewModel = getViewModel()
override fun onCreate(savedInstanceState: Bundle?) {
lifecycleScope.launchWhenStarted { // 2.
viewModel.userName.collect { userName ->
userNameLabel.text = userName
}
}
}
}
ビューLiveData
, StateFlow
常に初期値が必要です.STARTED
状態.LiveData
ビューが停止状態になると自動的に消費者を登録解除します.収集するときStateFlow
これは自動的に扱われません.この問題に対処するためにどちらかを起動することができますから値を収集停止
StateFlow
手動で、またはLiveData
両方の世界のベストを得るためにlifecycle-livedata-ktx
ライブラリ)class MyActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
viewModel.userName.asLiveData().observe(viewLifecycleOwner) {
userName -> userNameLabel.text = userName
}
}
}
シェアフロー
あなたは考えることができます
SharedFlow
の一般化としてStateFlow
.StateFlow
デフォルトでは、新しい加入者があるときに、最後の既知の値を発します.With SharedFlow
, どのように多くの以前の値を設定することができます放出される.subscriptionCount
それはビジネスロジックを定義するためにアクティブなコレクターがどれだけ存在するかを示します.resetReplayCache()
新しい加入者があるならば、最後の既知の値を出さないために.LiveData
簡単に実現できません.それは価値がありますか?
アイデアは、我々はJetpack
LiveData
プラットフォーム独立StateFlow
/SharedFlow
アプリ(ビュー、モデル、ストレージ)のすべての層で.LiveData
Androidのライフサイクルが依存しているので、ビュー/ビューモデルの外でそれを使用するのに適していません.StateFlow
APIはほぼLiveData
とSharedFlow
より高度なユースケースのための柔軟性を提供します.以来、すべての利点を得ることができますLiveData
これは、アプリケーションがバックグラウンドに行くときに自動的に購読/購読を解除することです)、これらの新しいAPIは、新しいアプリを構築している場合は、行く方法ですと思います.Reference
この問題について(StateFlowとShareFlow:町における新しいホットストリームAPI), 我々は、より多くの情報をここで見つけました https://dev.to/rockandnull/stateflow-and-sharedflow-the-new-hot-stream-apis-in-town-58beテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol