Обязательно ли писать запросы в комнате вне основного потока в Android? - PullRequest
0 голосов
/ 25 апреля 2019

Я хочу интегрировать базу данных Room в свое приложение для Android (JAVA).
Я просмотрел много содержимого, доступного в Интернете для базы данных Room, но ни один из них не развеял мои сомнения, которые

  1. Обязательно ли писать запросы из основного потока?
  2. Если да, что произойдет, если мы напишем запросы в основном потоке?

Ответы [ 2 ]

5 голосов
/ 25 апреля 2019
  1. Обязательно ли писать запросы из основного потока?
нет

Нет

Вы можете разрешить выполнение запросов в основном потоке, инициализируя с помощью .allowMainThreadQueries()

 Room.databaseBuilder(this, MyRoomDataBase::class.java, DATABASE_NAME).allowMainThreadQueries()
  1. Если да, что произойдет, если мы напишем запросы в основном потоке?

Если вы указали .allowMainThreadQueries(), он будет блокировать основной поток до тех пор, пока запрос не будет выполнен, в противном случае он выдаст IllegalStateException, и ваше приложение вылетит. Лучше не запрашивать основной поток

0 голосов
/ 25 апреля 2019

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

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

Если вы добавляете тип возврата в LiveData, вам не нужно устанавливать allowMainThreadQueries(), Запросы выполняются асинхронно в фоновом потоке с LiveData, и вы можете наблюдать за ним для получения обновлений в этих данных.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...