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

你可能感兴趣的文章
Python UI自动化测试Page Objects企业级实战
查看>>
python谷歌翻译,2021年9月10日亲测可用,一次可以翻译十万,强烈star
查看>>
Python UI自动化测试数据驱动实战
查看>>
Python UI自动化测试集成UnitTest
查看>>
Python UI自动化测试集成UnitTest
查看>>
python unicode-escape
查看>>
Python unittest mock:是否可以在测试时模拟方法默认参数的值?
查看>>
Python unittest单元测试框架 TestSuite测试套件
查看>>
PYTHON调离线语音合成并实时播放
查看>>
python unittest高级特性!
查看>>
Python unittest:如何将标准输出消息临时重定向到缓冲区并测试其内容?
查看>>
Python urllib/Requests下载文件失败,但浏览器下载失败
查看>>
Python urllib2 文件上传问题
查看>>
Python urllib2.open 连接由对等错误重置
查看>>
python urllib2详解及实例
查看>>
Python url请求提示certificate verify failed unable to get local issuer certificate
查看>>
Python UTC 日期时间对象的 ISO 格式不包括 Z(祖鲁语或零偏移)
查看>>
python valueerror object2_python遇到错误记录
查看>>
python vars的作用
查看>>
Python vcrpy库:HTTP请求记录和重放
查看>>