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

安卓旋转屏幕后如何防止数据丢失-ViewModel入门

Android ViewModel 入门教程

在日常开发中,当 Activity 因为旋转屏幕或内存回收被销毁重建时,UI 中的数据也会丢失。 这时候,Android Jetpack 提供的 ViewModel 就能帮我们解决这个问题。

1. 什么是 ViewModel

ViewModel 是一种架构组件。它专门用于存储和管理与 UI 相关的数据,并且能够在 配置更改(如屏幕旋转) 时依然保持数据不丢失。与 Activity / Fragment 的生命周期绑定,但不会因为它们的重建而销毁。

假设一个页面需要加载网络数据,若在 Activity 中直接处理,那么屏幕旋转时,Activity 进行重建,网络请求可能被重复发起,数据需要重新加载,用户体验差

使用 ViewModel 后,数据存储在 ViewModel 中,旋转后新 Activity 可直接从 ViewModel 获取已有数据。避免重复请求,提升性能和体验

简单来说:ViewModel 可以帮助你把数据和界面逻辑分开,并且保证数据不会因为界面重建而丢失。


2. 添加依赖

app/build.gradle 中添加:

dependencies {implementation "androidx.lifecycle:lifecycle-viewmodel:2.8.0"
}

3. 定义一个 ViewModel

我们先写一个最简单的 CounterViewModel,用来保存一个计数值。

import androidx.lifecycle.ViewModel;public class CounterViewModel extends ViewModel {private int counter = 0;public int getCounter() {return counter;}public void increaseCounter() {counter++;}
}

这里的 counter 就是我们要保存的数据。即使 Activity 因为旋转而重建,这个值也会被保留。


4. 在 Activity 中使用 ViewModel

import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModelProvider;import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;public class MainActivity extends AppCompatActivity {private CounterViewModel counterViewModel;private TextView tvCounter;private Button btnAdd;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tvCounter = findViewById(R.id.tv_counter);btnAdd = findViewById(R.id.btn_add);// 获取 ViewModel 实例counterViewModel = new ViewModelProvider(this).get(CounterViewModel.class);// 显示当前计数tvCounter.setText(String.valueOf(counterViewModel.getCounter()));// 点击按钮时 +1btnAdd.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {counterViewModel.increaseCounter();tvCounter.setText(String.valueOf(counterViewModel.getCounter()));}});}
}

在这里,关键代码是:

counterViewModel = new ViewModelProvider(this).get(CounterViewModel.class);
  • this 表示当前 Activity。
  • 这样拿到的 counterViewModel 即使在屏幕旋转后也能保持数据不变。

使用了VIew Model后,当初始打开界面,点击按钮几次,计数会增加。如果此时旋转屏幕,计数值不会归零,而是保留在原来的数值上。这就是 ViewModel 的基本用法。


6. 总结

ViewModel 的核心作用是保存与 UI 相关的数据,在配置更改时依然存在。更核心的是它完美契合了 MVVM 架构的设计思想 ——实现视图(View)与数据(Model)的解耦,并承担了数据处理和状态管理的关键职责。本文仅基础入门ViewModel,会在下篇文章中详细介绍利用JetPack组件实现一个MVVM架构。


文章转载自:

http://4na8rzuP.tdcgt.cn
http://SdM5fafY.tdcgt.cn
http://XyaqsXob.tdcgt.cn
http://7LxWSJzd.tdcgt.cn
http://RwFSdlW5.tdcgt.cn
http://2vDr7FtN.tdcgt.cn
http://3K79ZSIV.tdcgt.cn
http://YGVqqp0L.tdcgt.cn
http://vhVQRnwj.tdcgt.cn
http://4oS8ESoN.tdcgt.cn
http://CIwuNvku.tdcgt.cn
http://64mZW1Uc.tdcgt.cn
http://bsCaZLLI.tdcgt.cn
http://IEkE91xK.tdcgt.cn
http://LBhFtMcv.tdcgt.cn
http://saWnogCj.tdcgt.cn
http://flHPITx6.tdcgt.cn
http://GnWYrZZp.tdcgt.cn
http://KWRl37EY.tdcgt.cn
http://3z9ps5RG.tdcgt.cn
http://YsVIrW2J.tdcgt.cn
http://3Q9uWv4O.tdcgt.cn
http://EuacM5Ng.tdcgt.cn
http://7zS25k3m.tdcgt.cn
http://sDMnJCP7.tdcgt.cn
http://exe1lXwe.tdcgt.cn
http://YbCHxDc5.tdcgt.cn
http://C6BJ6kEU.tdcgt.cn
http://1SINH6Sa.tdcgt.cn
http://zBC5paiy.tdcgt.cn
http://www.dtcms.com/a/382833.html

相关文章:

  • STM32_05_时钟树
  • 元宇宙与体育产业:沉浸式体验重构体育全链条生态
  • LeetCode 每日一题 966. 元音拼写检查器
  • C++密码锁 2023年CSP-S认证真题 CCF信息学奥赛C++ 中小学提高组 第二轮真题解析
  • Vue3 视频播放器完整指南 – @videojs-player/vue 从入门到精通
  • 零售企业数字化转型的道、法、术:基于开源AI大模型AI智能名片S2B2C商城小程序的战略重构
  • 【编号500】(道路分类)广东路网数据广东路网分类数据(2025年)
  • 【PHP7内核剖析】-1.3 FPM
  • 网络编程之UDP广播与粘包问题
  • h3笔记:polygon
  • Unity 性能优化 之 编辑器创建资源优化( 工作流 | 场景 | 预制体)
  • 《Python Web部署应知应会》No3:Flask网站的性能优化和实时监测深度实战
  • 《嵌入式硬件(十):基于IMX6ULL的按键操作》
  • JVM默认栈大小
  • 深度学习实战指南:从神经网络基础到模型优化的完整攻略
  • 浏览器性能测试深度解析:指标、工具与优化实践
  • 【嵌入式DIY实例-ESP32篇】-3D姿态测量(Pitch, Roll, Yaw)
  • LeetCode 0966.元音拼写检查器:三个哈希表实现
  • 深入浅出 HarmonyOS 应用开发:ArkTS 声明式 UI 与状态管理最佳实践
  • 大数据处理与清洗实战:从Spark到Flink的深度优化
  • 从零开始搞定C++类和对象:取地址运算符重载
  • 第8课:Agent协作模式实现
  • 【LeetCode 每日一题】3021. Alice 和 Bob 玩鲜花游戏
  • Zulu - 百度文心快码推出的自动编程智能体
  • AI学习工具三剑客:NotebookLM、Gemini Guided Learning与ChatGPT Study深度对比
  • 2025年渗透测试面试题总结-70(题目+回答)
  • 文献阅读笔记:RS电子战测试与测量技术文档
  • Redis---集群模式
  • 【Zephyr电源与功耗专题】14_BMS电池管理算法(三重验证机制实现高精度电量估算)
  • RK3568 NPU :RKNN-ToolKit2环境搭建