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

你可能感兴趣的文章
POI实现Excel导入时提示NoSuchMethodError: org.apache.poi.util.POILogger.log
查看>>
POI实现Excel导出时常用方法说明
查看>>
POI导出Excel2003
查看>>
POI数据获取及坐标纠偏
查看>>
Quartz入门看这一篇文章就够了
查看>>
POI解析Excel【poi的坑——空行处理】
查看>>
POI:POI+JXL实现xls文件添加水印
查看>>
POI:POI实现docx文件添加水印
查看>>
POJ 1006
查看>>
Quartz中时间表达式的设置-----corn表达式
查看>>
poj 1035
查看>>
POJ 1061 青蛙的约会 (扩展欧几里得)
查看>>
Quartz2.2.1简单使用
查看>>
POJ 1080 Human Gene Functions(DP:LCS)
查看>>
Quant 开源项目教程
查看>>
POJ 1088 滑雪
查看>>
POJ 1095 Trees Made to Order
查看>>
POJ 1113 Wall(计算几何--凸包的周长)
查看>>
poj 1125Stockbroker Grapevine(最短路)
查看>>
Qualitor processVariavel.php 未授权命令注入漏洞复现(CVE-2023-47253)
查看>>