Во-первых, я не знаю всего в Android и Java, я работаю над этим, если вы обнаружите недостаток знаний в моем вопросе.
Когда я читаю о преимуществах Loaders , я читаю, что загрузчики работают в отдельных потоках, чтобы предотвратить не отвечающий пользовательский интерфейс.
После появления и чтения ViewModel и LiveData и Комната и после прочтения этого поста , особенно в разделе
Наблюдение за данными , в которых говорится
В мире Loader
получение ваших данных в пользовательском интерфейсе потребует
LoaderManager
, звоните initLoader()
в нужное место и строите>? LoaderCallbacks
. Мир немного проще в
Компоненты архитектуры мира. и т.д ..
и следующий раздел
Загрузите все вещи , о которых говорится во втором абзаце
Например, Room позволяет вам получать наблюдаемые запросы - запросы к базе данных.
которые возвращают LiveData
, чтобы изменения базы данных автоматически распространялись
через ваш ViewModel
на ваш пользовательский интерфейс. Вроде как CursorLoader
без
касаясь курсоров или загрузчиков.
Все вышеперечисленное подразумевает, что ViewModel и LiveData с Room могут работать в фоновом потоке , я имею в виду, когда мы используем ViewModel и LiveData с Room вместо Loaders , нам не нужно было использовать AsyncTask или AsyncTaskLoader или Executer
Но в этих примерах:
android-room-with-a-view , который можно использовать как шаблон, как говорят в README.md,
В MainActivity.java они пишут mWordViewModel.getAllWords().observe(this, .... ;
, и если мы глубоко проследим getAllWords()
, мы обнаружим, что функция представляет собой запрос select , но когда они хотят вставить данные в WordRepository.java
или WordRoomDatabase.java они используют AsyncTask ,
Я имею в виду, почему они использовали ViewModel и LiveData и Dao с запросом , выберите и в запросе insert они включают в комплекте AsyncTask с ViewModel и Dao ?, потому что то, что подразумевается выше ViewModel и LiveData с Комната может работать в фоновом потоке ?
Мой предыдущий вопрос относится к этому примеру android-persistence
на шаге 3_solution я имею в виду получить только данные ViewModel , но вставить данные как в DatabaseInitializer.java , AsyncTask включено в комплекте?
Также в этом примере BasicSample , Исполнитель включает включается , когда данные должны быть вставлены ?
Большое спасибо