微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

Dao用于数据库操作

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

使用viewmodel提取存储库并链接到UI生命周期

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

我有一个纯粹是静态的网络API,它是服务器REST体系结构的反映。

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

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

REST中的

/ contacts等同于API中的Class Contacts.java

其余的POST,GET,DELETE等同于相应类中的方法

示例:

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功能的任何解决方案。

解决方法

似乎就像我已经在使用的Singleton模式一样。似乎没有可用于这种简单情况的文档。因此,这基本上是一个猜谜游戏。不管是不好的做法还是有任何内存泄漏的风险,我都不知道,因为同样,也没有文档。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。