如何在后台任务中正确使用 Android Room(与 UI 无关)

How to properly use Android Room in background tasks (unrelated to UI)

目前 Room 与 DB 的 UI 集成工作良好:

用于数据库操作的 Dao

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

ViewModel 抽象存储库和 link 到 UI 生命周期

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

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

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

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

/REST 中的联系人等同于 API

中的 Class Contacts.java

POST, GET, DELETE in rest等同于各自class

中的方法

示例:

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

这是我的难处;我应该如何将 ROOM 集成到 POST 方法中 correctly/properly?

目前我有一个临时解决方案,它是实例化我需要插入数据并使用它的存储库,但这是每次调用该方法时的一次性情况,因为这里绝对没有生命周期,也没有有没有一种方法可以让一个足够细化的东西值得拥有(我不知道 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 功能的解决方案。

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