是否必须在android的主线程中写出查询?

问题描述 投票:0回答:2

我想将Room数据库集成到我的Android应用程序(JAVA)中。 我在互联网上浏览了房间数据库的许多内容,但没有一个清除了我的怀疑,这些都是

  1. 是否必须从主线程写出查询?
  2. 如果是的话,如果我们在主线程上写查询会发生什么?
android sqlite android-room
2个回答
5
投票
  1. 是否必须从主线程写出查询?

没有

您可以通过使用.allowMainThreadQueries()初始化来允许查询在主线程上运行

 Room.databaseBuilder(this, MyRoomDataBase::class.java, DATABASE_NAME).allowMainThreadQueries()
  1. 如果是的话,如果我们在主线程上写查询会发生什么?

如果你指定了.allowMainThreadQueries()那么它会阻塞主线程直到执行查询,否则它会抛出IllegalStateException并且你的应用程序会崩溃。最好不要在主线程上查询


0
投票

默认情况下,Observable会议室查询在主UI线程上运行。如果要在主线程上运行它们,则需要使用下面的代码指定它。

Room.databaseBuilder(this, MyRoomDataBase::class.java, DATABASE_NAME).allowMainThreadQueries()

如果要在LiveData中包装返回类型,则不需要设置allowMainThreadQueries(),查询在具有LiveData的后台线程上异步运行,您可以在其上观察以接收该数据的更新。

如果数据库的大小较小,并且您没有对数据库执行任何繁重的操作,则可以允许在主线程上进行查询,否则构建器可能会长时间锁定UI。

© www.soinside.com 2019 - 2024. All rights reserved.