首页 > 解决方案 > 在不使用 Room 的情况下使用 LiveData 和 ViewModel

问题描述

对于 android MVVM 架构,在我看到的所有示例中,人们要么使用 Room 来存储/检索数据,要么通过 Repository 类直接从 API 调用中获取数据。

我既没有进行 API 调用,也没有使用 Room 数据库来存储数据。但是我需要我的 ViewModel 从存储库中获取数据并将其传递给我的 Activity。

如果您不打算使用 Room 在本地保存数据,您的 Repository 类是否可以从 Application 类继承,以便您可以保存静态变量/伴随对象?

处理这种情况的好方法是什么?

标签: androidandroid-architecture-componentsandroid-livedataandroid-viewmodelandroid-mvvm

解决方案


通常,在软件工程中,存储库用于从应用程序的其余部分(通常直接为业务层)抽象数据层(数据库、Web 服务),一个很好的例子是预订网站的以下模式:

存储库样式

它通过发布/订阅异步连接接收更新并将它们发送到其他组件。所以组件是相互独立的。
所以 Repository 只是一个简单的中介类,用于使应用程序更加模块化,以便您可以更轻松地交换部分,并确保应用程序的其余部分不会打扰 DB 连接或 HTTP 调用等。因此,从技术上讲,您可以从 Application(或其他任何东西)继承并使用它来保存静态变量等。

正如这里所解释的:

应用程序对象不能保证永远留在内存中,它会被杀死。与流行的看法相反,该应用程序不会从头开始重新启动。Android 将创建一个新的 Application 对象并在用户之前所在的位置启动 Activity,从而给人一种应用程序从一开始就没有被杀死的错觉。

所以这完全取决于您,您可以根据需要使用存储库样式,它根本不依赖于 Room 或其他任何东西。


推荐阅读