首页 > 解决方案 > 如果我们可以直接从 MVVM 中的 Fragment 访问 Repository,为什么要使用 ViewModel

问题描述

我是一个初学者,我想知道为什么我们在 MVVM 中使用 ViewModel,当我们可以直接访问 Repository 并从 Fragment 调用 Repository 函数时。这种方法似乎更容易。请参阅下面的详细信息,为什么我会问这个问题。

如果您想查看代码,请参阅 Stackoverflow 中的以下问题:

Recycler 视图显示 Room 数据库中的所有数据,而不仅仅是显示所选 id 的数据

我有一个问题,我想在 RecyclerView 中显示所选 id 的详细信息,但是当我使用 ViewModel 时,RecyclerView 总是显示所有 id 的详细信息。然后我没有通过ViewModel访问Repository,而是直接访问Repository,解决了问题。现在 RecyclerView 仅显示所选 id 的详细信息。

标签: androidmvvmandroid-recyclerview

解决方案


该类ViewModel旨在以生命周期意识的方式存储和管理与 UI 相关的数据。ViewModel 类允许数据在配置更改(例如屏幕旋转)后继续存在。

Android 框架管理 UI 控制器的生命周期,例如活动和片段。框架可能会决定销毁或重新创建 UI 控制器,以响应完全不受您控制的某些用户操作或设备事件。

如果系统销毁或重新创建 UI 控制器,则存储在其中的任何与 UI 相关的瞬态数据都将丢失。例如,您的应用程序可能在其一项活动中包含用户列表。当为配置更改重新创建活动时,新活动必须重新获取用户列表。对于简单的数据,activity可以使用onSaveInstanceState()onCreate()中的方法从bundle中恢复其数据,但是这种方法只适用于可以序列化然后反序列化的少量数据,不适用于列表等潜在的大量数据用户或位图。

另一个问题是 UI 控制器经常需要进行异步调用,这可能需要一些时间才能返回。UI 控制器需要管理这些调用并确保系统在它们被销毁后清理它们以避免潜在的内存泄漏。这种管理需要大量维护,并且在为配置更改重新创建对象的情况下,这是一种资源浪费,因为对象可能不得不重新发出它已经进行的调用。

将视图数据所有权从 UI 控制器逻辑中分离出来更加容易和高效。

欲了解更多信息和样品检查这个


推荐阅读