Я пытаюсь выяснить, что в итоге делает RunInTransaction.В документации по комнате не сказано ничего, кроме «Выполняет указанный Runnable в транзакции базы данных».
Из того, что я понимаю:
Если у нас есть асинхронная операция, такая как запрос, а затем некоторая вставка безrunInTransaction
roomDB.runInTransaction(new Runnable() {
@Override
public void run() {
query
}
});
insertions
insertions
RunInTransaction блокирует базу данных до завершения указанной операции.Таким образом, при первой вставке поток приостанавливается (пожалуйста, исправьте меня) до завершения runInTransaction.
Как я могу контролировать, какая процедура выполняется в первую очередь?
Но я думаю, что база данных в любом случае блокирует таблицы ибез использования метода runInTransaction.Пожалуйста, исправьте меня, если я ошибаюсь.
Обновлено
@Dao
public interface RepoDao {
@Query("SELECT * FROM Table")
LiveData<List<Table>> getAll();
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insert(List<Table> table);
}
Основная активность
repo = ((BasicApp)getApplication()).getRepository();
repo.insertDataFromNetwork();
((BasicApp)getApplication()).getDatabase().repoMethods()
.getAll().observe(this, new Observer<List<Table>>() {
@Override
public void onChanged(@Nullable List<Table> message) {
Log.d("hello");
}
});;
insertDataFromNetwork
mDatabase.runInTransaction(new Runnable() {
@Override
public void run() {
mDatabase.repoMethods().insert(....);
mDatabase.repoMethods().insert(....);
mDatabase.repoMethods().insert(....);
mDatabase.repoMethods().insert(....);
mDatabase.repoMethods().insert(....);
}
}
});