Синхронизировать звонки с комнатой - PullRequest
0 голосов
/ 23 апреля 2019

Я изучаю liveata и room db, но я не могу понять одну вещь: Документ говорит, что все запросы комнаты должны выполняться в другом потоке, но некоторые запросы, которые мне нужны, должны выполняться в главном потоке.Зачем? Представьте себе : у меня есть приложение чата, и когда в приложение приходит сообщение, мне нужно проверить отправителя этого сообщения, если оно заблокировано пользователем приложения, прежде чем показывать сообщение пользователю.Так что мне нужно сделать это в основной теме.Как справиться с этой ситуацией с комнатой?

Ps: я не хочу использовать allowMainThreadQueries(), потому что в основном мои запросы будут в другой теме.

1 Ответ

2 голосов
/ 23 апреля 2019

Представьте себе: у меня есть приложение для чата

Предположительно, для этого используется сеть. Ваш сетевой ввод / вывод должен быть в фоновом потоке, иначе у вас будут большие проблемы.

... и когда в приложение приходит сообщение, мне нужно проверить отправителя этого сообщения, если оно заблокировано пользователем приложения, прежде чем показывать сообщение пользователю.

Итак, вы находитесь в фоновом потоке уже при поступлении сообщения чата. Вы можете запросить базу данных в этом фоновом потоке, чтобы узнать, есть ли отправитель в черном списке.

Так что мне нужно сделать это в главном потоке.

Нет, потому что ваш сетевой ввод-вывод находится в фоновом потоке. Выполните проверку заблокированного отправителем в том же потоке, прежде чем передавать результаты пользователю.

Даже если по какой-то причине вы попали в основной поток приложения с сообщением перед проверкой базы данных, вы все равно можете проверить базу данных в (другом) фоновом потоке и добавить сообщение в пользовательский интерфейс только после этой проверки.

...