【问题标题】:What is the correct way to access the Room database?访问 Room 数据库的正确方法是什么?
【发布时间】:2020-05-06 15:12:39
【问题描述】:

我希望你能帮助我。

我是使用 Android Jetpack 的新手,特别是 Room 组件。正如他们在文档中提到的,在主线程中加入数据库是一种不好的做法,所以我想知道我们如何访问数据库。我们需要创建一个“Worker”和一个“WorkRequest”,然后使用 WorkManager 在后台线程中排队?还是有更好的办法?

【问题讨论】:

  • 您不应该为此使用 WorkManager。 WorkManager 用于可延迟的工作,如果它用于显示 UI,这几乎肯定不是。

标签: java android android-room android-jetpack


【解决方案1】:

WorkManager 不是访问Room 数据库的正确方法。原因是:

WorkManager 旨在用于运行可延迟, 保证后台异步工作时工作的 约束满足

所以,有几个WorkManager 对待您不匹配访问Room 数据库或任何一般的数据库:

  • 首先:您需要即时访问数据库,但WorkManager 可以延期。
  • 第二:在大多数情况下,您需要在没有约束的情况下访问 Room 数据库,但 WorkManager 在满足约束时运行。

相反,还有其他方式,如ThreadExecutorsKotlin Coroutines,还有LiveData 提供对数据库查询的异步访问。

查看其他文档链接:ConcurrentThreading

【讨论】:

  • 如果我只想简单地插入数据库。你认为最好的方法是什么?根据这个Processes and threads overview 可能正在使用线程,因为 AsyncTask 用于更大的工作。
【解决方案2】:

您需要创建一个新线程来运行房间查询。

如果您使用 Kotlin,那么协程将是您进行多线程的最佳选择 我建议你在google code lab.

上学习这个课程

如果您熟悉响应式编程,也可以使用 RxJava 进行多线程。

【讨论】:

    猜你喜欢
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    • 2022-09-24
    • 1970-01-01
    • 2020-05-15
    相关资源
    最近更新 更多