При использовании библиотеки Room для Android в документации четко указывается, что мы не можем совершать вызовы в главном потоке, если мы специально не разрешим их.Что меня интересует, так это методы, которые имеют тип возврата void
.Кажется глупым, что возвращение LiveData
автоматически запустит их из основного потока, а пустые типы - нет (если я что-то упустил).Есть ли какой-нибудь простой способ сделать это без необходимости запускать это в моем собственном управляемом потоке?
Мой запрос:
@Dao
interface UserDao {
@Query("DELETE FROM users")
fun clear()
}
Я даже пытался использовать функции отражения + расширения Kotlin,но это, похоже, не сработало во время выполнения:
fun KFunction<Unit>.execOn(executor: Executor, vararg args: Any?) {
executor.execute {
this.call(args)
}
}
Затем сделайте вызов, например:
myDb.userDao()::clear.execOn(diskExecutor)
Обратите внимание, что работает:
diskExecutor.execute {
myDb.userDao().clear()
}