访问 Room 数据库的正确方法是什么?

What is the correct way to access the Room database?

希望你能帮助我。

我刚开始使用 Android Jetpack,特定于 Room 组件。正如他们在文档中提到的那样,在主线程中访问数据库是一种不好的做法,所以我想知道我们如何访问数据库。我们需要创建一个 "Worker" 和一个 "WorkRequest",然后使用 WorkManager 在后台线程中排队?或者有更好的方法吗?

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

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

中学习这门课程

如果您熟悉响应式编程,您也可以将 RxJava 用于多线程。

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

WorkManager is intended to be used to run deferrable, guaranteed background asynchronous work when the work’s constraints are satisfied

因此,有一些 WorkManager 待遇与访问 Room 数据库或一般来说的任何数据库不匹配:

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

相反,还有其他方法,例如 Thread, Executors, Kotlin Coroutines, and also LiveData 提供对数据库查询的异步访问。

查看其他文档链接:Concurrent and Threading