Modo correcto de consulta de Android Kotlin Realm + devolución de elementos no administrados en Bg Thread

¿Cuál es la forma correcta de consultar y devolver un resultado no gestionado de elementos con el reino, todo en el hilo de background ?. Estoy usando algo así:

return Observable.just(1) .subscribeOn(Schedulers.io()) .map { val realm = Realm.getDefaultInstance() val results = realm.where(ItemRealm::class.java) .equalTo("sent", false).findAll() realm to results } .map { val (realm, results) = it val unManagedResults = realm.copyFromRealm(results) realm.close() unManagedResults } } 

Y luego encadenando este observable con otro que publicará los resultados en un server.

La solución funciona, aunque es un poco fea en estos aspectos:

  • No hay forma adecuada de envolver el realmQuery en un observable, porque no hay forma de abrir una instancia real en un hilo de background sin este tipo de trampa (al less que yo sepa), así que necesito usar este observable falso. Observable.just(1) .
  • No es el mejor lugar para abrir y cerrar instancias de Realm, dentro del primer y segundo map

  • No sé si se garantiza que la instancia del reino esté cerrada después de que se hayan copydo todos los elementos.

Entonces, ¿cuál es la forma correcta de consultar y devolver los resultados no administrados en el hilo de background (algo de context, necesito esto para enviar los resultados a un server, en segundo plano y esta tarea es totalmente independiente del flujo de datos actual de mi aplicación, por lo que debería estar fuera del hilo principal).

Versión sugerida:

 return Observable.fromCallable { Realm.getDefaultInstance().use { realm -> realm.copyFromRealm( realm.where(ItemRealm::class.java) .equalTo(ItemRealm.FIELD_SEND, false).findAll() ) } }