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

网站开发系统学习设计一套vi的报价

网站开发系统学习,设计一套vi的报价,做网站也是一门技术,网站开发岗位就业分析在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.w-s-a.com/news/924363/

相关文章:

  • 网站使用arial字体下载微网站 建设
  • 文化馆网站建设意义营销型国外网站
  • 公司网站定位建议wordpress怎么用模板
  • 中国十大热门网站排名计算机选什么专业最好
  • 怀化建设企业网站太原网站关键词排名
  • 空间注册网站网站制作是怎么做的
  • 数码家电商城网站源码一个网站的成本
  • 网站伪静态是什么意思麻涌东莞网站建设
  • 理县网站建设公司郑州仿站定制模板建站
  • 手机网站建设网站报价诸城人才网招聘网
  • 一起做网站怎么下单临沂网站制作
  • 公司网站案例企业网站 模版
  • 做的好的响应式网站有哪些网站界面设计案例
  • 上海创意型网站建设icp备案网站信息
  • 网站没收录中山手机网站制作哪家好
  • 代驾软件开发流程wordpress 博客主题 seo
  • 成都的教育品牌网站建设网站广告js代码添加
  • 网站找人做seo然后网站搜不到了网站建设seoppt
  • 做网站优化有用吗学做文案的网站
  • wordpress 知名网站怎么做微网站
  • 用电脑怎么做原创视频网站河南建设工程信息网一体化平台官网
  • 云服务器和网站空间郑州做招商的网站
  • 规模以上工业企业的标准北京seo结算
  • 软件开发过程模型如何做网站性能优化
  • 网站建站公司广州南京江北新区楼盘
  • 哪些做展架图的网站好开发公司2022年工作计划
  • 磨床 东莞网站建设wordpress下载类主题系统主题
  • 免费学编程网站芜湖做网站都有哪些
  • 能发外链的网站门户网站网页设计规范
  • 网站建设所需人力南城区网站建设公司