¿Por qué la operación de eliminación de sala (con RxJava) da un error de subproceso de interfaz de usuario incluso especificando subproceso de suscripción diferente?

Así que simplemente, el DAO

@Query("DELETE FROM Things WHERE someIdOfTheThing IN (:listOfId)")
abstract fun deleteThings(listOfId: MutableList<String>): Maybe<Int>

uso

mDisposables.add(mThingsDao
    .deleteThings(listOfId)
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe({
         ...
     }, {
         ...
     })
)

y error,

// Cannot access database on the main thread since it may potentially lock the UI for a long period of time.

a idea simple que estaba pensando es especificarsubscribeOn(Schedulers.io()) y luego dar todo el trabajo a las manos mágicas de Rx, pero falló.

Entonces, ¿qué es lo que me estoy perdiendo?

Después de envolver como a continuación y usardeleteThingsWrapped, empezo a trabajar. Pero aún no entiendo por qué el primer enfoque no funcionó

open fun deleteThingsWrapped(listOfId: MutableList<String>): Maybe<Int> {
    return Maybe.create(object : MaybeOnSubscribe<Int> {
        override fun subscribe(emitter: MaybeEmitter<Int>) {
            emitter.onSuccess(deleteThings(listOfId))
        }
    })
}

@Query("DELETE FROM Things WHERE someIdOfTheThing IN (:listOfId)")
abstract fun deleteThings(listOfId: MutableList<String>): Maybe<Int>

Respuestas a la pregunta(2)

Su respuesta a la pregunta