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

不良网站举报中心官网个人网站自助建站

不良网站举报中心官网,个人网站自助建站,邯郸广告公司网站建设,开发公司app在Android开发中#xff0c;数据与界面的分离一直是一项重要的挑战。为了解决这个问题#xff0c;Google推出了Android Jetpack组件之一的ViewModel。ViewModel是一种用于管理UI相关数据的架构组件#xff0c;它能够帮助开发者实现优雅的数据驱动和生命周期管理。本文将深入…在Android开发中数据与界面的分离一直是一项重要的挑战。为了解决这个问题Google推出了Android Jetpack组件之一的ViewModel。ViewModel是一种用于管理UI相关数据的架构组件它能够帮助开发者实现优雅的数据驱动和生命周期管理。本文将深入浅出地介绍ViewModel的使用和原理带你一步步掌握这个强大的组件。 什么是ViewModel ViewModel是Android Jetpack组件之一它的主要目的是将UI控制器如Activity和Fragment与数据相关的业务逻辑分开使得UI控制器能够专注于展示数据和响应用户交互而数据的获取和处理则交由ViewModel来管理。这种分离能够使代码更加清晰、易于测试和维护。 ViewModel的原理 ViewModel的原理其实并不复杂。在设备配置发生变化如屏幕旋转导致Activity或Fragment重建时ViewModel不会被销毁而是保留在内存中。这样UI控制器可以在重建后重新获取之前的ViewModel实例并继续使用其中的数据从而避免数据丢失和重复加载。 ViewModelStore和ViewModelStoreOwner ViewModel的原理涉及两个核心概念ViewModelStore和ViewModelStoreOwner。 ViewModelStore是一个存储ViewModel实例的容器它的生命周期与UI控制器的生命周期关联。在UI控制器Activity或Fragment被销毁时ViewModelStore会清理其中的ViewModel实例避免内存泄漏。 ViewModelStoreOwner是拥有ViewModelStore的对象通常是Activity或Fragment。ViewModelProvider通过ViewModelStoreOwner来获取ViewModelStore并通过ViewModelStore来管理ViewModel的生命周期。 ViewModelProvider ViewModelProvider是用于创建和获取ViewModel实例的工具类。它负责将ViewModel与ViewModelStoreOwner关联并确保ViewModel在合适的时机被销毁。 在Activity中获取ViewModel实例 viewModel new ViewModelProvider(this).get(MyViewModel.class);在Fragment中获取ViewModel实例 viewModel new ViewModelProvider(this).get(MyViewModel.class);使用ViewModel 添加ViewModel依赖 首先确保你的项目已经使用了AndroidX并在build.gradle中添加ViewModel依赖 dependencies {implementation androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1 }创建ViewModel 创建ViewModel非常简单只需继承ViewModel类并在其中定义数据和相关操作。 public class MyViewModel extends ViewModel {private MutableLiveDataString data new MutableLiveData();public LiveDataString getData() {return data;}public void fetchData() {// 模拟异步数据获取new Handler().postDelayed(() - {data.setValue(Hello, ViewModel!);}, 2000);} }在UI控制器中使用ViewModel 在Activity或Fragment中获取ViewModel的实例并观察数据变化 viewModel new ViewModelProvider(this).get(MyViewModel.class); viewModel.getData().observe(this, data - {// 更新UItextView.setText(data); });viewModel.fetchData(); // 触发数据获取操作ViewModel与跨组件通信 ViewModel不仅仅用于在单个UI控制器内部共享数据它还可以用于在不同UI控制器之间共享数据实现跨组件通信。例如一个Fragment中的数据可以通过ViewModel传递给Activity。 在Activity中共享数据 sharedViewModel new ViewModelProvider(this).get(SharedViewModel.class); sharedViewModel.getData().observe(this, data - {// 更新UItextView.setText(data); });在Fragment中共享数据 sharedViewModel new ViewModelProvider(requireActivity()).get(SharedViewModel.class);注意在跨组件通信时需要使用同一个ViewModelProvider获取相同类型的ViewModel实例。在Activity中使用this作为ViewModelProvider的参数在Fragment中使用requireActivity()作为参数。 ViewModel与SavedState 有时我们可能希望在ViewModel中保存一些与UI控制器生命周期无关的数据以便在重建时恢复状态。ViewModel提供了SavedState功能它可以让我们在ViewModel中持久化保存数据。 示例代码 public class MyViewModel extends ViewModel {private SavedStateHandle savedStateHandle;public MyViewModel(SavedStateHandle savedStateHandle) {this.savedStateHandle savedStateHandle;}public LiveDataString getData() {return savedStateHandle.getLiveData(data);}public void setData(String data) {savedStateHandle.set(data, data);} }使用SavedStateViewModelFactory创建带有SavedState功能的ViewModel public class MyActivity extends AppCompatActivity {private MyViewModel viewModel;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ViewModelProvider.Factory factory new SavedStateViewModelFactory(getApplication(), this);viewModel new ViewModelProvider(this, factory).get(MyViewModel.class);viewModel.getData().observe(this, data - {// 更新UItextView.setText(data);});if (savedInstanceState null) {// 第一次创建时触发数据获取操作viewModel.fetchData();}} }ViewModel使用过程中的注意点 不要在ViewModel中持有Context的引用避免引发内存泄漏。ViewModel应该只关注数据和业务逻辑不应处理UI相关的操作。不要在ViewModel中保存大量数据避免占用过多内存。当数据量较大或需要跨进程共享数据时应该考虑使用其他解决方案如Room数据库或SharedPreferences。 结论 通过本文的介绍你已经了解了Android Jetpack ViewModel的使用与原理。ViewModel的出现极大地简化了Android开发中的数据管理和生命周期处理使得应用更加健壮和高效。在实际开发中合理使用ViewModel能够帮助你构建优雅、易维护的Android应用。 Android 学习笔录 Android 性能优化篇https://qr18.cn/FVlo89 Android 车载篇https://qr18.cn/F05ZCM Android 逆向安全学习笔记https://qr18.cn/CQ5TcL Android Framework底层原理篇https://qr18.cn/AQpN4J Android 音视频篇https://qr18.cn/Ei3VPD Jetpack全家桶篇内含Composehttps://qr18.cn/A0gajp Kotlin 篇https://qr18.cn/CdjtAF Gradle 篇https://qr18.cn/DzrmMB OkHttp 源码解析笔记https://qr18.cn/Cw0pBD Flutter 篇https://qr18.cn/DIvKma Android 八大知识体https://qr18.cn/CyxarU Android 核心笔记https://qr21.cn/CaZQLo Android 往年面试题锦https://qr18.cn/CKV8OZ 2023年最新Android 面试题集https://qr18.cn/CgxrRy Android 车载开发岗位面试习题https://qr18.cn/FTlyCJ 音视频面试题锦https://qr18.cn/AcV6Ap
http://www.hkea.cn/news/14583860/

相关文章:

  • 网站建设的基本流程包括什么怎么做网站前段
  • 打电话说帮忙做网站深圳东门步行街地铁站
  • 网站怎么建设可以发图评论html网站开发相关书籍
  • 北京市住房与城乡建设部网站服务器创建wordpress
  • 房地产建设网站的意义深圳企业网络推广运营技巧
  • 热转印 东莞网站建设设计最简单的企业网站
  • 网站里弹窗怎么做开发h5网站开发
  • 设计网站首页多少钱怎么做自己的网站平台
  • 成都市住房与城乡建设厅网站外包公司 网站建设 深圳
  • 类似视频教程网站的wordpress主题wordpress的网站后台
  • 建设网站公司名称大全大美工设计网站官网
  • 自己做网站很难装修网站排名前十
  • 简单又快的科学小制作广州优化网站排名
  • 180天做180个网站网站的mysql数据库放到服务器上服务器需要安装mysql吗?
  • 网站建站开发今天的新闻联播内容
  • 建设企业网站个人网银wordpress有多大的数据量
  • 庆阳工程建设网站湖南做网站的公司
  • 吧网站做软件的软件下载医疗设计网站建设
  • 从百万到千万 网站怎么优化wordpress调用ja
  • 网站设计要求有哪些电子商务网站建设技巧
  • 网站开发后乙方把源代码交给甲方手机免费网址
  • dz网站制作优化网站公司外包
  • 通信建设资质管理信息系统网站优化关键词的正确方法
  • 网站专题欣赏专业网站建设组织
  • 手机模板网站下载电子商务seo是什么
  • 长沙本土网站制作公司织梦dedecms蓝色培训机构模板教育学校学院整站php网站源码
  • 做网站怎么别人搜不出来淄博企业网站
  • 外贸网站怎么换域名深圳新生代网络推广
  • html5网站模板免费下载热血传奇网页游戏
  • 优化网站排名怎么制作如何在网上宣传