【问题标题】:Room - LiveData unnecessary when reading data only once?Room - 仅读取一次数据时不需要 LiveData?
【发布时间】:2019-04-22 12:30:53
【问题描述】:

我正在关注codelab,从数据库中检索数据的建议最佳实践之一是为我的DAO 返回值使用LiveData 包装器(代码实验室中的第6 步)。

但在我的应用程序中,我仅在活动开始时读取现有的 .sqlite 文件一次。因此,应该没有必要使用这个包装器,对吗?

那么让我的DAO 返回一个简单对象而不是使用LiveData 构造围绕它是否可以接受(就最佳实践而言)?

【问题讨论】:

    标签: android android-room android-livedata


    【解决方案1】:

    LiveData有两个特点:更新的传递和异步操作。

    如果您在应用运行期间不更改数据,您将无法利用 LiveData 的更新交付功能。

    但是,您仍然需要安排在后台线程上加载数据。如果您打算通过其他方式(例如,RxJava,您自己的后台线程)这样做,您可以避免使用LiveData

    另外,如果您的计划是一开始就加载数据库中的所有数据并且从不更改它,那么 SQLite 和 Room 毫无意义。只需使用 JSON 文件。 SQLite 的价值在于能够查询和修改部分数据。

    【讨论】:

    • 两点:1)最后一点你是正确的,但是我有两个活动在数据库中使用两个不同的表。所以另一个确实使用了插入和删除操作。 2) 至于另一点,这是真的,我仍然需要在后台线程上加载数据。只做一次的正确方法是什么?我想简单地手动触发观察者,但建议的答案 here 不是很好看。任何资源或解释链接都会有所帮助。
    • 问题是我假设观察者的onChanged 方法最初没有触发。进一步的测试表明这是文件的 IO 问题。所以我关于这样做的问题曾经过时了,因为我可以用这种方法简单地做到这一点。我想我可以认为我最初的问题是这样回答的。
    • @Big_Chair:“只做一次的正确方法是什么?” -- 如果你使用 RxJava,让你的 DAO 返回一个Single。如果您使用 Kotlin 协程,您可以将您的 DAO 查询函数设为 suspend fun。否则,让 DAO 只返回数据,然后执行其他操作以在后台线程上调用该 DAO 方法。或者,只需使用LiveData,我猜这就是您所选择的。
    猜你喜欢
    • 1970-01-01
    • 2021-08-31
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    相关资源
    最近更新 更多