我想将Room数据库集成到我的android应用程序(JAVA)中。
我浏览了互联网上有关Room数据库的许多内容,但这些内容都没有消除我的疑虑,这是
答案 0 :(得分:5)
- 必须从主线程中写查询吗?
否
您可以通过使用.allowMainThreadQueries()
初始化来允许查询在主线程上运行
Room.databaseBuilder(this, MyRoomDataBase::class.java, DATABASE_NAME).allowMainThreadQueries()
- 如果是,如果我们在主线程上写查询会怎样?
如果您指定了.allowMainThreadQueries()
,它将阻塞主线程直到执行查询为止,否则它将抛出IllegalStateException
,并且您的应用程序将崩溃。最好不要在主线程上查询
答案 1 :(得分:0)
默认情况下,可观察的房间查询在主UI线程上运行。如果要在主线程上运行它们,则需要使用以下代码进行指定。
Room.databaseBuilder(this, MyRoomDataBase::class.java, DATABASE_NAME).allowMainThreadQueries()
如果您将返回类型包装在LiveData中,则无需设置allowMainThreadQueries()
,查询将在具有LiveData的后台线程上异步运行,您可以在其上观察以接收该数据中的更新。
如果您的数据库较小,并且没有对数据库执行任何繁重的操作,则可以允许在主线程上进行查询。否则,构建器可能会长时间锁定UI。