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

ViewModel、Lifecycles、LiveData基本使用

以下是使用Java实现ViewModel、Lifecycles和LiveData的基本用法,以及它们的原理简述。

ViewModel的基本使用(Java)

1. 引入依赖

在你的build.gradle文件中添加以下依赖:

implementation 'androidx.lifecycle:lifecycle-viewmodel:2.4.0' // 使用时请检查最新版本

2. 创建ViewModel

import androidx.lifecycle.ViewModel;
public class MyViewModel extends ViewModel {
private int myData;
public int getMyData() {
return myData;
}
public void setMyData(int myData) {
this.myData = myData;
}
}

3. 在Activity或Fragment中获取和使用ViewModel

import androidx.lifecycle.ViewModelProviders;
// ...
MyViewModel viewModel = ViewModelProviders.of(this).get(MyViewModel.class);
viewModel.setMyData(42);
int data = viewModel.getMyData();

原理

ViewModel用于在配置更改(如屏幕旋转)时保存UI数据。其生命周期比Activity或Fragment更长,确保数据在配置更改时不会丢失。

Lifecycles的基本使用(Java)

1. 引入依赖

implementation 'androidx.lifecycle:lifecycle-runtime:2.4.0' // 使用时请检查最新版本

2. 实现LifecycleObserver

import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.OnLifecycleEvent;
public class MyLifecycleObserver implements LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
public void onCreate() {
// 处理ON_CREATE事件
}
// 可以添加其他生命周期事件的处理方法
}

3. 在Activity或Fragment中添加观察者

import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.ProcessLifecycleOwner;
// ...
Lifecycle lifecycle = ProcessLifecycleOwner.get().getLifecycle();
lifecycle.addObserver(new MyLifecycleObserver());

原理

Lifecycles库通过LifecycleObserver接口提供了一种简便的方式来观察Activity或Fragment的生命周期事件,使得其他组件或类能够在不继承Activity或Fragment的情况下响应生命周期变化。

LiveData的基本使用(Java)

1. 引入依赖

implementation 'androidx.lifecycle:lifecycle-livedata:2.4.0' // 使用时请检查最新版本

2. 在ViewModel中使用LiveData

import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
public class MyViewModel extends ViewModel {
private MutableLiveData<String> myLiveData = new MutableLiveData<>();
public LiveData<String> getMyLiveData() {
return myLiveData;
}
public void updateLiveData(String value) {
myLiveData.setValue(value);
}
}

3. 在Activity或Fragment中观察LiveData

import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
// ...
MyViewModel viewModel = ViewModelProviders.of(this).get(MyViewModel.class);
viewModel.getMyLiveData().observe(this, new Observer<String>() {
@Override
public void onChanged(String s) {
// 数据更新时的处理逻辑
}
});

原理

LiveData是一种可观察的数据持有类,它具有生命周期感知能力,意味着它只会在观察者(如Activity或Fragment)处于活跃状态时更新数据,从而避免内存泄漏。当数据发生变化时,所有注册的观察者都会收到通知。

综上所述,这些组件在Android架构组件中扮演着关键角色,帮助开发者更加高效地管理UI数据、响应生命周期事件以及实现数据的响应式更新。

相关文章:

  • TK防关联引流系统:全球多账号运营,一“键”掌控!
  • Typora 破解、激活!亲测有效!2024 最新激活方法
  • 排序-快排算法对数组进行排序
  • 6-11 函数题:某范围中的最小值
  • 源代码防泄密经验分享之安全上网篇
  • 联邦学习的基本流程,联邦学习权重聚合,联邦学习权重更新
  • Serverless 使用OOS将http文件转存到对象存储
  • Spring的循环依赖
  • Vite - 项目打包从 0 到 1(完美解决打包后访问白屏问题)
  • Python第二语言(八、Python包)
  • 解决富文本中抖音视频无法播放的问题——403
  • HTML静态网页成品作业(HTML+CSS)—— 非遗皮影戏介绍网页(6个页面)
  • 后端启动项目端口冲突问题解决
  • 【随手记】maplotlib.use函数设置图像的呈现方式
  • Android FirebaseApp.initializeApp(this)无法初始化
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • Android优雅地处理按钮重复点击
  • extjs4学习之配置
  • gulp 教程
  • Java IO学习笔记一
  • Java的Interrupt与线程中断
  • Laravel核心解读--Facades
  • LeetCode算法系列_0891_子序列宽度之和
  • Python打包系统简单入门
  • SSH 免密登录
  • Vue 动态创建 component
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 闭包,sync使用细节
  • 搭建gitbook 和 访问权限认证
  • 分布式熔断降级平台aegis
  • 工程优化暨babel升级小记
  • 漂亮刷新控件-iOS
  • 译米田引理
  • 用mpvue开发微信小程序
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 阿里云重庆大学大数据训练营落地分享
  • ###项目技术发展史
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (55)MOS管专题--->(10)MOS管的封装
  • (7)STL算法之交换赋值
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (十三)Maven插件解析运行机制
  • (转)【Hibernate总结系列】使用举例
  • (转)LINQ之路
  • .Net CF下精确的计时器
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .NET开发不可不知、不可不用的辅助类(一)
  • .net与java建立WebService再互相调用
  • .net中应用SQL缓存(实例使用)
  • @Autowired标签与 @Resource标签 的区别
  • []我的函数库