java - 将通话与房间同步

标签 java android android-room android-livedata

我正在学习 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/

相关文章:

java - cxf 将源文件放在目标中但编译器看不到它们?

java - java中cloneable接口(interface)有什么用?

java - 如何使用依赖于 ivy 导入的 lib 的 Ant taskdef

适用于所有 Android 设备的 Android Badger

java - Spring MySQL Profiler 抛出异常

android - 需要从Android捕获选择性STDOUT以在listview中显示

android - 使用 Google Nearby Connections 2.0 时是否可以监控发现过程?

android - 房间数据库错误 : Migration didn't properly handle

java - 使用相同的方法恢复 Room 数据库,但使用不同的 DAO

java - 关于无参数 doa 定义的 Android Room 的 gradle 异常