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