IT评测·应用市场-qidao123.com

标题: Android Compose: `remember` 与 `ViewModel` 保存数据的优缺点对比 [打印本页]

作者: 曂沅仴駦    时间: 2025-3-15 18:06
标题: Android Compose: `remember` 与 `ViewModel` 保存数据的优缺点对比

在开发 Android 应用时,管理 UI 状态是一个不可避免的话题。Jetpack Compose 提供了两种常见的方式来保存和管理数据:remember 和 ViewModel。它们各有优缺点,实用于差异的场景。
本文将详细对比这两者在保存数据时的优缺点,资助你在实际开发中做出更合适的选择。
remember 和 ViewModel 的基本概念

在深入对比之前,我们先简单回顾一下这两者的基本概念。
remember
remember 是 Jetpack Compose 提供的一个工具,用于在 UI 组件重组(Recomposition)过程中缓存数据。当 UI 被重新绘制时,remember 可以保持一些数据稳定,避免不必要的重新盘算或数据丢失。
ViewModel
ViewModel 是 Android Architecture Components 中的一个组件,用于在配置更改(如屏幕旋转)时保存和管理 UI 相干的数据。ViewModel 通常与 LiveData 或 State 一起使用,它的生命周期跨越了 UI 组件的生命周期,能够确保数据在配置更改后不丢失。
remember 的优缺点

优点

缺点

ViewModel 的优缺点

优点

缺点

remember vs ViewModel:何时使用?

我们来总结一下,什么时候适合使用 remember,什么时候适合使用 ViewModel。
使用 remember 的场景:


使用 ViewModel 的场景:


示例代码:remember 与 ViewModel 对比

我们通过一个简单的例子来展示如何使用 remember 和 ViewModel 保存数据。
使用 remember:

  1. @Composable
  2. fun RememberExample() {
  3.      val counter = remember { mutableStateOf(0) }
  4.      Column(
  5.          horizontalAlignment = Alignment.CenterHorizontally,
  6.          modifier = Modifier.padding(16.dp)
  7.      ) {
  8.          Text("Count: ${counter.value}")
  9.          Spacer(modifier = Modifier.height(8.dp))
  10.          Button(onClick = { counter.value++ }) {
  11.              Text("Increment")
  12.          }
  13.      }
  14. }
复制代码
使用 ViewModel:

  1. class CounterViewModel : ViewModel() {
  2.      private val _counter = mutableStateOf(0)
  3.      val counter: State<Int> = _counter
  4.      fun increment() {
  5.          _counter.value++
  6.      }
  7. }
  8. @Composable
  9. fun ViewModelExample(viewModel: CounterViewModel = viewModel()) {
  10.      Column(
  11.          horizontalAlignment = Alignment.CenterHorizontally,
  12.          modifier = Modifier.padding(16.dp)
  13.      ) {
  14.          Text("Count: ${viewModel.counter.value}")
  15.          Spacer(modifier = Modifier.height(8.dp))
  16.          Button(onClick = { viewModel.increment() }) {
  17.              Text("Increment")
  18.          }
  19.      }
  20. }
复制代码
结论

remember 和 ViewModel 都是非常有用的工具,但它们实用于差异的场景:

在实际开发中,根据数据的生命周期和复杂度来选择合适的工具,能够让你的代码更加简洁高效。如果只是局部的 UI 状态,remember 是一个非常合适的选择;如果是跨界面或必要持久化的数据,ViewModel 会更适合。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4