当前位置: 首页 > news >正文

android StateFlow和sharedflow

前言

在 Android/Kotlin 中,StateFlow 和 SharedFlow 都是用于处理数据流的工具,但它们有不同的特性和适用场景。

1.主要区别

StateFlow
始终有一个当前值(initial value)
只保留最新的值
新订阅者会立即收到当前状态值
自动去重:连续相同的值不会重复发送
是热流(Hot Flow)

SharedFlow
可以没有初始值
可以配置缓存多个历史值
新订阅者默认不会收到之前的值(除非配置了 replay)
不会自动去重
也是热流(Hot Flow)

2.应用场景

2.1StateFlow

2.1.1 适用于:UI 状态管理

class MyViewModel : ViewModel() {private val _uiState = MutableStateFlow(UiState())val uiState: StateFlow<UiState> = _uiState.asStateFlow()// UI 总是需要知道当前状态
}

2.1.2 配置或设置

private val _isDarkMode = MutableStateFlow(false)
val isDarkMode: StateFlow<Boolean> = _isDarkMode

2.1.3 任何需要"当前状态"的场景 - 比如用户登录状态、网络连接状态等

2.2 SharedFlow 适用于:

2.2.1 一次性事件(Events)

class MyViewModel : ViewModel() {private val _events = MutableSharedFlow<Event>()val events: SharedFlow<Event> = _events.asSharedFlow()// 比如显示 Toast、导航事件等fun showToast() {_events.emit(Event.ShowToast("Hello"))}
}

2.2.2 多播场景

// 配置多个订阅者都能收到
private val _clicks = MutableSharedFlow<Unit>(replay = 0,extraBufferCapacity = 1
)

2.2.3 需要保留多个历史值

// 保留最近 5 个值
private val _logs = MutableSharedFlow<String>(replay = 5)

3.快速选择指南

需要"状态"?用 StateFlow
需要"事件"?用 SharedFlow
新订阅者需要立即知道当前值?用 StateFlow
不希望错过任何发射的值?用 SharedFlow (配置适当的 replay 和 buffer)

http://www.dtcms.com/a/597001.html

相关文章:

  • 幽冥大陆(十八)手机摄像头注册到电脑源码——东方仙盟炼气期
  • 2025年渗透测试面试题总结-240(题目+回答)
  • 防滑齿构型与牙体组织损伤风险的相关性分析
  • C#7、如何处理异常
  • 网站建设培训公司番禺厂家关键词优化
  • Oracle19c单机部署(本地)
  • 【vscode】vscode上plantuml安装和使用
  • Prompt 提示词工程
  • html5做网站总结邢台 网站建设
  • 黑马JAVAWeb -Vue工程化 - Element Plus
  • [Android] AR绘画素描1.0版(AR Draw - Sketch Anime Cartoon 1.0)
  • 微信网站用什么语言开发金融软件网站建设公司
  • 一个静态网站怎么做南宁网站建设怎么样
  • CGAL(计算几何算法库)
  • 数据中台:打破企业数据孤岛,实现全域资产化的关键一步
  • 如何保持自己的技术前沿性?
  • 『 QT 』显示类控件 二
  • 【Rust】m2 mac 编译linux 、aarch、win 程序
  • 【FAQ】HarmonyOS SDK 闭源开放能力 — Network Kit
  • 使用arduino用 esp32 连接阿里云遇到的坑
  • 哈尔滨市延寿建设局网站巢湖网站开发
  • 制作百度移动网站模板网页服务器一年多少钱
  • 从概念到偏好:文生图模型的四层进化之路(训练过程)
  • Gated DeltaNet 网络学习记录
  • <数据集>yolo航拍斑马线识别数据集<目标检测>
  • GitHub笔记
  • SpringBoot+Vue3无人机AI巡检系统
  • 中山网站百度优化社交网站建设教程
  • 彩票网站怎么做推广淮安高端网站制作
  • 基于MATLAB实现的Elman神经网络用于电力负载预测