#android #parallel-processing #realm
Вопрос:
Мне необходимо:
- Обновите мою базу данных с помощью 4k новых элементов для tableOne в фоновом режиме (10-15 секунд)
- Во время обновления мне нужно внести некоторые изменения в 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
}
}