
MVI 架构模式中的 UiState 设计:单一、嵌套与 `sealed class` 的应用
在 MVI (Model-View-Intent) 架构模式中,UiState 是核心概念之一,它代表了用户界面在任何给定时刻的完整且不可变的状态。理解如何有效设计 UiState 对于构建清晰、可预测且易于维护的应用至关重要。 1. MVI 中 ViewModel 的 UiState:单一性与最佳实践 在 MVI 架构中,推荐每个屏幕(或功能模块)只对应一个 ViewModel,并...

在 MVI (Model-View-Intent) 架构模式中,UiState 是核心概念之一,它代表了用户界面在任何给定时刻的完整且不可变的状态。理解如何有效设计 UiState 对于构建清晰、可预测且易于维护的应用至关重要。 1. MVI 中 ViewModel 的 UiState:单一性与最佳实践 在 MVI 架构中,推荐每个屏幕(或功能模块)只对应一个 ViewModel,并...

什么是 MVI 架构? MVI 是 Model-View-Intent 的缩写,它是一种现代的、响应式的应用架构模式。其灵感来源于前端框架(如 React 中的 Redux),核心思想是单向数据流 (Unidirectional Data Flow) 和唯一数据源 (Single Source of Truth)。 与 MVVM 或 MVP 不同,MVI 旨在使应用的状态管理更加可预测、...

在 Kotlin 协程中,StateFlow 和 Channel 都是用于异步数据流和通信的强大工具,但它们的设计理念和适用场景有显著区别。理解这些区别对于选择正确的工具至关重要。 StateFlow 详解 StateFlow 是一种热流(Hot Flow),它代表一个可观察的、单一的、可更新的状态。它始终持有一个当前值,并且会将这个最新值立即发送给新的订阅者。 核心特性: ...
在 MVI (Model-View-Intent) 架构中,处理用户意图 (Intent) 是核心部分。你提到的两种方式:使用 Channel 处理 Intent 和 直接调用 ViewModel 的 handleIntent 方法,在实现上确实存在区别,并且各自有其适用场景和优缺点。 1. 使用 Channel 处理 Intent 当你在 MVI 架构中使用 Channel 来处理 I...

在 Jetpack Compose 的声明式 UI 世界中,Composable 函数的核心职责是描述 UI 的状态,它应当是纯粹的、无副作用的。然而,在实际应用中,我们不可避免地需要与外界交互,例如:发起网络请求、读取数据库、响应生命周期事件等。这些操作被称为“副作用”(Side Effects)。为了在 Composable 的生命周期内安全、高效地处理这些副作用,Jetpack Com...
在 Kotlin 协程中,SharedFlow 是一种非常强大且灵活的热流 (Hot Flow),它旨在解决 BroadcastChannel 的一些痛点,并提供比 StateFlow 更通用的多播能力。你可以把它看作是 StateFlow 和 Channel 的结合体,拥有它们各自的优点,并在此基础上提供了更精细的控制。 SharedFlow 核心特性详解 SharedFlow 就...
下面的代码中count和_doubleCount是否有有点多余,为什么不直接赋值给count和doubleCount? class MainViewModel : ViewModel() { private val _count = MutableLiveData<Int>() private val _doubleCount = MutableLiveData...
scope: A.() -> Unit 是 Kotlin 中一种特殊的函数类型,叫做扩展函数类型,下面详细解释它的含义和使用场景。 基本概念 1. 普通函数类型回顾 在 Kotlin 里,普通的函数类型形如 (参数类型列表) -> 返回类型。例如,(Int, Int) -> Int 代表一个接收两个 Int 类型参数、返回一个 Int 类型值的函数。 2. 扩展函数类型...

“受益”于目前 Android 手机各类屏幕尺寸长短不定、宽高比例大小不一的现状,屏幕适配 依然是 Android 应用开发时绕不开的问题 我们在日常开发中使用得最多的尺寸单位应该是 dp 了,Google 也推荐开发者尽量使用 dp 作为单位值,因为系统会根据屏幕的实际情况来完成 dp 和 px 之间的对应换算,使得同个 dp 值的显示效果在不同手机屏幕上不会相差太大。但直接使用 dp ...

首先排序算法可以分为内部排序算法和外部排序算法:在内存中进行的称为内部排序算法,也就是这里所说的这十种算法;相应的,当数据量很大时无法全部拷贝到内存需要使用外存,称为外部排序算法。接下来我们可用如下表来简单概括这十种算法: 十大经典排序算法 平均时间复杂度 最好时间复杂度 最坏时间复杂度 空间复杂度 ...