0

目前 Room 与 DB 到 UI 的集成运行良好:

用于 DB 操作的 Dao

用于与 Daos 交互并将数据缓存到内存中的存储库

ViewModel 抽象存储库并链接到 UI 生命周期

但是,出现了另一种情况,我很难理解如何正确实现 Room 使用。

我有一个纯静态的网络 API,它反映了服务器的 REST 架构。

有一个解析器方法遍历 URL 结构并通过反射将其转换为现有 API,并调用他找到的任何最终方法。

在此 API 中,每个 REST 操作都由等效 REST 命名结构类下的方法表示,即:

REST 中的 /contacts 等同于 API 中的类 Contacts.java

POST、GET、DELETE in rest 等同于各自类中的方法

例子:

public class Contacts {
    public static void POST() {
        // operations are conducted here
    }
}

这是我的困难;我应该如何正确/正确地将 ROOM 集成到该 POST 方法中?

目前我有一个临时解决方案,即实例化我需要插入数据并使用它的存储库,但这是每次调用该方法时的一次性情况,因为这里绝对没有生命周期,也没有办法有一个足够细化的东西值得拥有(我不知道我需要在 API 中建立一个存储库多久才能证明将其缓存 X 时间是合理的)。

我目前正在工作的示例:

public class Contacts {
    public static void POST(Context context, List<Object> list) {
        new ContactRepository(context).addContacts(list);
    }
}

或者将其用作单例:

public class Contacts {
    public static void POST(Context context, List<Object> list) {
        ContactRepository.getInstance(context).addContacts(list);
    }
}

鉴于生命周期的存在,与 View 相关的 Room 交互一切正常,但在这种情况下,我不知道如何正确执行此操作;这些不仅仅是视图可能调用网络请求的情况 - 然后我只使用 networkboundrequest 或类似的 - 这也可以是服务器发送的数据而应用程序从未请求它,例如更新应用程序相关数据,如用户启动与您的对话 - 该应用程序无法知道这一点,因此它首先来自服务器。

如何正确实施?我还没有找到任何关于这种情况的指南,我担心我可能做错了。

编辑:根据使用的标签和提供的示例,此项目不是 Kotlin,因此请提供任何不依赖于迁移到 Kotlin 以使用其协程或类似 Kotlin 功能的解决方案。

4

1 回答 1

0

似乎使用单例模式,就像我已经在使用的那样,是要走的路。对于像这样的简单场景,似乎没有可用的文档。所以这基本上是一个猜谜游戏。无论这是一种不好的做法还是有任何内存泄漏风险,我都不知道,因为同样没有这方面的文档。

于 2020-11-27T14:42:34.620 回答