Методы пустых помещений в основной теме - PullRequest
0 голосов
/ 08 октября 2018

При использовании библиотеки 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()
}

1 Ответ

0 голосов
/ 08 октября 2018

Кажется глупым, что возвращение LiveData автоматически запустит их из основного потока, но пустые типы не будут (если я что-то упустил).

Без какой-либо аннотации,Комната не будет знать, что вы хотите, чтобы void возвращающий метод DAO запускался в фоновом потоке.С реактивным типом возврата (например, LiveData, Single) вы явно запрашиваете фоновое выполнение, поэтому дополнительные метаданные (например, аннотация) не требуются.

Возможно, вы подадите запрос на добавление функции.для такого подхода, основанного на аннотациях.

Есть ли какой-нибудь простой способ сделать это без необходимости запускать это в моем собственном управляемом потоке?

Если вы спрашиваете«У Room есть опция фонового выполнения для методов DAO, отличных от тех, которые имеют реактивные типы возврата?», тогда ответ - нет, по крайней мере, в настоящее время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...