news 2026/6/9 16:29:43

如何在Android中使用StateFlow和MutableStateFlow?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何在Android中使用StateFlow和MutableStateFlow?

在 Android 中,StateFlow + MutableStateFlow 是 MVVM 架构下UI 状态管理的首选方案,核心遵循「内部可变、外部只读」的封装原则,结合 ViewModel 存放状态、Lifecycle 管理订阅生命周期,确保状态安全且无内存泄漏。以下是完整的使用步骤和最佳实践:

一、前置准备(依赖)

确保项目引入 Kotlin 协程和 Android 生命周期相关依赖(Android Studio 新建项目通常已内置):

// build.gradle (Module 级别) dependencies { // 协程核心 implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3" // ViewModel (如需结合) implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2" // 生命周期扩展 (repeatOnLifecycle) implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.6.2" }

二、核心使用流程(ViewModel + UI 层)

步骤 1:定义状态数据类(轻量化、不可变)

推荐用 data class 封装 UI 状态,保证状态不可变(通过 copy 修改),避免多线程问题:

// 示例:页面加载状态 data class UiState( val isLoading: Boolean = false, // 加载中 val userData: String? = null, // 业务数据 val errorMsg: String? = null // 错误信息 )
步骤 2:ViewModel 中持有 MutableStateFlow,暴露 StateFlow

ViewModel 是状态的「单一数据源」,内部用 MutableStateFlow 修改状态,对外暴露只读的 StateFlow

import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow import
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 15:39:37

基于VirtualBox使用ISO创建Linux镜像

安装VirtualBox VirtualBox是一款开源免费跨平台的虚拟机软件,本节指导用户完成VirtualBox的安装。 安装前准备 安装VirtualBox的主机需满足以下条件。 推荐使用64位的Windows操作系统的主机安装VirtualBox。建议主机内存不低于4 GB,且使用双核处理器…

作者头像 李华
网站建设 2026/6/10 5:28:06

O(log N) 对数计算

1、通过 Google 数学计算器 数学求解器 - Google 搜索 N 100 2、通过 Windows 10/11 计算器、以10为底换底计算方法。 2.1、计算系数 100 log 2 Windows 计算器是 log10(N)、而log(N) log2(N) 2.2、计算百分比 2 / 100 0.02 2.3、计算2系数 2 log(10) 0.30102999566…

作者头像 李华
网站建设 2026/6/10 4:50:51

linux系统新增启动项,支持从数据盘启动

linux系统(PE系统)挂载数据盘并支持从数据盘启动的情况大多使用在云上机器排查问题等场景。 本文简绍如何在PE系统中新增启动项,并指向数据盘。 主要采用grub2中链式启动能力 什么是链式启动? 主要用于实现跨操作系统的链式加…

作者头像 李华
网站建设 2026/6/9 0:14:52

机房内怎么估算光纤使用长度,每次估算不是长了就是短了,好难受!

在机房干久了,你一定遇到过这种场景: 光纤刚插上,一头到位,另一头差 30 厘米; 或者更惨——算多了,盘成一坨“光纤方便面”,运维巡检一看就想骂人。 很多同事都会说一句话: “光纤长度,真不好算。” 但说实话,光纤长度不是算不准,而是大多数人压根没“按工程方…

作者头像 李华
网站建设 2026/6/9 8:52:42

大模型中 System Prompt 与 Instruction 的区别

在大模型应用开发中,System Prompt(系统提示)和 Instruction(指令)是两种常用的提示工程技术,它们在定义、作用范围和使用场景上存在明显区别。一、定义与基本概念System Prompt(系统提示&#…

作者头像 李华