博客
关于我
Jetpack组件---ViewModel 概览
阅读量:790 次
发布时间:2019-03-24

本文共 1145 字,大约阅读时间需要 3 分钟。

Android 开发中,界面相关的数据管理一直是一个需要关注的问题。一个好用的方法是使用 ViewModel 类,它能更好地管理这些数据的存储和恢复过程,确保即使在屏幕旋转或重新创建界面控制器时,数据也能被正确保留和恢复。

Android 框架会根据系统事件或用户操作,销毁或重新创建界面控制器。比如,当用户旋转屏幕时,系统可能会销毁当前的界面控制器(如 Activity 或 Fragment),并重新创建新的实例。这个过程会导致存放在这些控制器中的瞬态数据丢失。传统的做法是在 Activity 的 onCreate() 方法中使用 onSaveInstanceState() 来恢复数据,这适用于可以序列化和反序列化的简单数据,比如短文本或整数值。然而,这并不能处理较大的数据集,如用户列表或较大型位图数组。

此外,界面控制器经常需要处理异步操作,比如网络请求或数据库查询。但这些控制器需要被系统销毁时清理这些操作,否则可能导致内存泄漏。重新创建界面控制器时,可能需要重新发送已经发出的请求,这会导致资源浪费。因此,将界面控制器的职责与数据管理分开,可以有效减轻工作负担,使架构更清晰。

ViewModel 是一个辅助类,用于管理视图数据。它能在屏幕旋转或配置更改时自动保存状态,并在下次界面控制器创建时恢复这些数据。我在 Activity 中使用 ViewModel 来存储用户列表,而不是直接在 Activity 中处理,这样在 Activity 销毁后,数据不会丢失,且不需要在新 Activity 中重新提取数据。

ViewModel 的生命周期由它所属的界面控制器决定,比如 Activity 或 Fragment。它会在界面控制器的生命周期变化时被保留,并在适当的时候被销毁。这样可以确保数据在多次屏幕旋转或重新创建控制器时依然可用。

Fragment 之间的数据共享也是一个常见问题。使用 ViewModel 能更简单地实现数据传递,不需依赖 Activity。比如,主 Fragment 可以将 SharedViewModel 传给详情 Fragment,确保两个 Fragment 共享相同的数据实例,无需额外的接口或中间逻辑。

另外,ViewModel 可以替代 CursorLoader 这样的加载器,实现数据与数据库的同步。它能更灵活地管理数据加载和更新过程,减少对上下文的依赖,避免内存泄漏。通过将数据管理去中心化,系统能够更高效地处理设备配置更改和数据库变更。

最后,ViewModel 还支持使用 Kotlin 协程来处理异步操作,使数据加载更加高效且不堵塞。它的生命周期管理和状态保存功能使其成为一个强大的工具,帮助开发者更好地管理视图数据和业务逻辑。

转载地址:http://ctlkk.baihongyu.com/

你可能感兴趣的文章
OpenMCU(三):STM32F103 FreeRTOS移植
查看>>
OpenMCU(二):GD32E23xx FreeRTOS移植
查看>>
OpenMMLab | S4模型详解:应对长序列建模的有效方法
查看>>
OpenMMLab | 【全网首发】Llama 3 微调项目实践与教程(XTuner 版)
查看>>
OpenMMLab | 面向多样应用需求,书生·浦语2.5开源超轻量、高性能多种参数版本
查看>>
OpenMV入门教程(非常详细)从零基础入门到精通,看完这一篇就够了
查看>>
OpenObserve云原生可观测平台本地Docker部署与远程访问实战教程
查看>>
OpenPPL PPQ量化(4):计算图的切分和调度 源码剖析
查看>>
OpenPPL PPQ量化(5):执行引擎 源码剖析
查看>>
openpyxl 模块的使用
查看>>
Openresty框架入门详解
查看>>
OpenResty(1):openresty介绍
查看>>
OpenResty(2):OpenResty开发环境搭建
查看>>
openshift搭建Istio企业级实战
查看>>
Openstack 之 网络设置静态IP地址
查看>>
OpenStack 综合服务详解
查看>>
OpenStack 网络服务Neutron详解
查看>>
Openstack(两控制节点+四计算节点)-1
查看>>
openstack--memecache
查看>>
openstack-keystone安装权限报错问题
查看>>