我正在学习 livedata 和 room db,但我无法理解一件事:文档说所有房间查询都应该在另一个线程中执行,但我需要的一些查询应该在主线程中执行。为什么? 想象:我有一个聊天应用程序,当消息到达该应用程序时,我需要检查该消息的发件人是否被应用程序用户阻止,然后再向用户显示消息。所以我需要在主线程中执行此操作。如何处理这种有空间的情况?
Ps:我不想使用 allowMainThreadQueries()
因为我的查询大部分都在另一个线程中。
最佳答案
Imagine: I have a chat app
据推测,这需要使用网络。您的网络 I/O 最好位于后台线程,否则您会遇到更大的问题。
...and when a message comes to the app i need to check this message's sender if blocked by app user before showing message to user.
因此,当聊天消息传入时,您已经处于后台线程中。您可以查询该后台线程上的数据库以查看发件人是否在阻止列表中。
So i need to do this in main thread.
不,因为您的网络 I/O 位于后台线程上。在将结果传递给用户之前,在同一线程上执行 is-sender-blocked 检查。
即使由于某种原因,您在检查数据库之前在主应用程序线程上收到消息,您仍然可以在(不同的)后台线程上检查数据库,并且仅在检查后将消息添加到 UI。
关于java - 将通话与房间同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55811191/