博客
关于我
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/

你可能感兴趣的文章
oracle数据库笔记---pl/sql的基础使用方法
查看>>
Transformer 架构解释
查看>>
Oracle数据库表空间 数据文件 用户 以及表创建的SQL代码
查看>>
oracle数据库零碎---Oracle Merge 使用,表中存在数据就修改,没有数据自动添加
查看>>
Oracle数据库验证IMP导入元数据是否会覆盖历史表数据
查看>>
oracle数据插入表,oracle同时向多表插入数据
查看>>
oracle数据类型和对应的java类型
查看>>
【C++进阶篇】——string类的使用
查看>>
Oracle未开启审计情况下追踪表变更记录
查看>>
Oracle条件查询
查看>>
Oracle查看数据库会话连接
查看>>
Oracle查询前几条数据的方法
查看>>
oracle树形查询 start with connect by
查看>>
oracle毕业论文题目,历届毕业论文申报题目大全.doc
查看>>
oracle求助---win7下oracle配置相关疑问Starting Oracle Enterprise Manager 10g Database Control ...发生系统错误 5。
查看>>
Oracle流程控制语句
查看>>
oracle深度解析检查点
查看>>
Oracle游标
查看>>
oracle游标数最大数,Oracle 最大连接数 最大游标数
查看>>
oracle用户改名
查看>>