Параллельная запись в БД Realm для Android

#android #parallel-processing #realm

Вопрос:

Мне необходимо:

  1. Обновите мою базу данных с помощью 4k новых элементов для tableOne в фоновом режиме (10-15 секунд)
  2. Во время обновления мне нужно внести некоторые изменения в tableTwo (просто смените флаг, 10 мс).

Что я получил: Когда я начинаю обновлять свою базу данных большим количеством элементов и пытаюсь изменить флаг в другой таблице, моя вторая функция просто ждет 10-15 секунд, пока не закончится первая функция. Но мне нужно делать это параллельно. Как этого добиться?

Расширения для области:

 inline fun <T> withRealm(config: RealmConfiguration? = null,action: Realm.() -> T): T {
  return if (config != null) {
    Realm.getInstance(config).let { action(it) }
  } else {
    Realm.getDefaultInstance().let { action(it) }
  }
}

inline fun <T> executeInTransaction(config: RealmConfiguration? = null, action: Realm.() -> T) =
    withRealm(config) {
      beginTransaction()
      val result = action()
      commitTransaction()
      result
}
 

Функции обновления (1):

Загрузка данных из сети:

 remoteDataSource.load()
        .map {
           dictionaryDataSource.save(it)
        }
         .subscribeOn(Schedulers.io())
         .observeOn(AndroidSchedulers.mainThread())
         .subscribe({},{})
 

Экономия:

 fun save(data: List<T>) = executeInTransaction() { 
        /**saving with realm*/ 
}
 

Функция изменения флага:

 fun change() {
      val user = getUser()
      executeInTransaction {
          user.languageLevel = level.internalLevelValue
      }
}