android - 如果我们可以直接从 MVVM 中的 Fragment 访问 Repository,为什么要使用 ViewModel
问题描述
我是一个初学者,我想知道为什么我们在 MVVM 中使用 ViewModel,当我们可以直接访问 Repository 并从 Fragment 调用 Repository 函数时。这种方法似乎更容易。请参阅下面的详细信息,为什么我会问这个问题。
如果您想查看代码,请参阅 Stackoverflow 中的以下问题:
Recycler 视图显示 Room 数据库中的所有数据,而不仅仅是显示所选 id 的数据
我有一个问题,我想在 RecyclerView 中显示所选 id 的详细信息,但是当我使用 ViewModel 时,RecyclerView 总是显示所有 id 的详细信息。然后我没有通过ViewModel访问Repository,而是直接访问Repository,解决了问题。现在 RecyclerView 仅显示所选 id 的详细信息。
解决方案
该类ViewModel
旨在以生命周期意识的方式存储和管理与 UI 相关的数据。ViewModel 类允许数据在配置更改(例如屏幕旋转)后继续存在。
Android 框架管理 UI 控制器的生命周期,例如活动和片段。框架可能会决定销毁或重新创建 UI 控制器,以响应完全不受您控制的某些用户操作或设备事件。
如果系统销毁或重新创建 UI 控制器,则存储在其中的任何与 UI 相关的瞬态数据都将丢失。例如,您的应用程序可能在其一项活动中包含用户列表。当为配置更改重新创建活动时,新活动必须重新获取用户列表。对于简单的数据,activity可以使用onSaveInstanceState()
onCreate()中的方法从bundle中恢复其数据,但是这种方法只适用于可以序列化然后反序列化的少量数据,不适用于列表等潜在的大量数据用户或位图。
另一个问题是 UI 控制器经常需要进行异步调用,这可能需要一些时间才能返回。UI 控制器需要管理这些调用并确保系统在它们被销毁后清理它们以避免潜在的内存泄漏。这种管理需要大量维护,并且在为配置更改重新创建对象的情况下,这是一种资源浪费,因为对象可能不得不重新发出它已经进行的调用。
将视图数据所有权从 UI 控制器逻辑中分离出来更加容易和高效。
欲了解更多信息和样品检查这个
推荐阅读
- android - 如何设置 ChipNavigationBar 的文字颜色
- scala - 通过 Flink 在 Kafka 中动态写入多个 topic 异常处理
- ios - 是否可以将创建领域数据库的脚本从 JSON 添加到我的项目中?
- amazon-web-services - AWS IoT Core Basic Ingest 识别超出的 qoutas
- python - 尽管使用了兼容版本,但 Tensorflow 2.4.0 未检测到 GPU
- sql - 检查 SQL Server 中的视图
- django - 当我使用 git 在 heroku 中提交更改时,我的 django 对象会受到影响
- c# - 登录后 User.Identity.Name 为空,但 User.Identity.IsAuthenticated 设置正确
- javascript - 上传文件 Vue 3 和 Django REST
- vba - 多张PPT幻灯片合并成主PPT