Представьте себе: у меня есть приложение для чата
Предположительно, для этого используется сеть. Ваш сетевой ввод / вывод должен быть в фоновом потоке, иначе у вас будут большие проблемы.
... и когда в приложение приходит сообщение, мне нужно проверить отправителя этого сообщения, если оно заблокировано пользователем приложения, прежде чем показывать сообщение пользователю.
Итак, вы находитесь в фоновом потоке уже при поступлении сообщения чата. Вы можете запросить базу данных в этом фоновом потоке, чтобы узнать, есть ли отправитель в черном списке.
Так что мне нужно сделать это в главном потоке.
Нет, потому что ваш сетевой ввод-вывод находится в фоновом потоке. Выполните проверку заблокированного отправителем в том же потоке, прежде чем передавать результаты пользователю.
Даже если по какой-то причине вы попали в основной поток приложения с сообщением перед проверкой базы данных, вы все равно можете проверить базу данных в (другом) фоновом потоке и добавить сообщение в пользовательский интерфейс только после этой проверки.