Инициализация LiveData в конструкторе ViewModel - PullRequest
0 голосов
/ 14 сентября 2018

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

public class LogVM extends AndroidViewModel{

      MasterDatabase roomDatabase;
      LiveData<List<Log>> logData;

      LogVM(Application application){
           super(application);
           roomDatabase=MasterDatabase.getInstance(application);
           logData=roomDatabase.getLogDao.getAllLogs();

      }

       public LiveData<List<Log>> getLogData() {
       return logData;
    }

 }

Приведенный выше код на самом деле работает нормально. Но мой вопрос: при инициализации logdata в конструкторе, мы не запускаем операцию базы данных в главном потоке? Но код компилируется и запускается без предупреждения. Может кто-нибудь объяснить, как ?? Извините, если это глупый вопрос. Но я только начинающий!

1 Ответ

0 голосов
/ 14 сентября 2018

Room создаст код для вас, чтобы гарантировать, что при выполнении кода вашей базы данных он будет запланирован в фоновом потоке.Если вы посмотрите на сгенерированный код, то обнаружите, что классы DAO используют внутренний класс с именем ComputableLiveData, который для своей работы использует IOThreadExecutor.

Краткое описание этого приведено в документации.https://developer.android.com/topic/libraries/architecture/livedata

Библиотека постоянства Room поддерживает наблюдаемые запросы, которые возвращают объекты LiveData.Наблюдаемые запросы пишутся как часть объекта доступа к базе данных (DAO).

Room генерирует весь необходимый код для обновления объекта LiveData при обновлении базы данных.Сгенерированный код выполняет запрос асинхронно в фоновом потоке, когда это необходимо.Этот шаблон полезен для синхронизации данных, отображаемых в пользовательском интерфейсе, с данными, хранящимися в базе данных.Вы можете прочитать больше о Room и DAO в постоянном руководстве по библиотеке Room.

...