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

你可能感兴趣的文章
Qt环境搭建(Visual Studio)
查看>>
QT点击"X"按钮,调用closeEvent()函数来实现调用特定事件(附:粗略介绍QT的信号与槽的使用方法)...
查看>>
QT样式表——url路径
查看>>
QT数据库(三):QSqlQuery使用
查看>>
QT教程5:消息框
查看>>
SpringBoot中集成阿里开源缓存访问框架JetCache实现声明式实例和方法缓存
查看>>
pom.xml中提示web.xml is missing and <failonmissingw>...
查看>>
Pomelo开发中Web客户端开发API简介
查看>>
QT教程2:QT5的体系构架
查看>>
PON架构(全光网络)
查看>>
PoolingHttpClientConnectionManager原理剖析
查看>>
QT教程1:ubuntu18.04安装QT5
查看>>
POP-一个点击带有放大还原的动画效果
查看>>
POP3 协议在计算机网络中的优缺点
查看>>
qt批量操作同类型控件
查看>>
Portaudio笔记-WASAPI
查看>>
position:fixed失效情况
查看>>
Qt开发笔记:QGLWidget、QOpenGLWidget详解及区别
查看>>
Position属性四个值:static、fixed、absolute和relative的区别和用法
查看>>
POSIX thread编程中关于临界区内条件变量的分析
查看>>