Acceso de dominio a través de subprocesos con rxjava y dagger2

He leído muchos mensajes sobre este tema, pero todavía es un poco poco claro para mí. Entiendo que no puedes acceder a la clase Realm o objetos de reino a través de diferentes subprocesos, así que me pregunto cuál es la mejor manera de manejar eso.

Tengo un servicio que inicia un hilo. Ese hilo hace trabajo de fondo (incluyendo el trabajo a través de rxjava en Schedulers.io ). Ahora en un cierto punto quiero guardar algunos datos en el reino que vive en una clase de DataManager. Originalmente estaba usando Dagger2 para inyectar Realm en mi clase DataManager (que se inyectaba en el servicio). Sin embargo, esto no funcionará ya que la inyección se realizó en el hilo principal, por lo que Realm.getDefaultInstance() está vinculado al subproceso principal, pero se accede en DataManager desde un subproceso diferente.

La única opción que puedo imaginar es la de llamar a Realm.getDefaultInstance() y realm.close() al principio y al final de cada método que está realizando una transacción. No me importa hacer esto, pero me pregunto si habrá rendimiento de éxito llamando a Realm.getDefaultInstance() cada vez que quiero guardar un objeto. ¿Hay una mejor manera de hacer esto? Gracias por adelantado.

Abordé el problema de roscado mientras usaba Realm en una de mis aplicaciones creando una clase DatabaseManager que me inyectaba en Actividades y Servicios usando Dagger 2.

Por ejemplo, si tengo una Task entidad, la clase DatabaseManager tenía un método void update(Task task) que obtendría la instancia de Realm por defecto, buscaría la Task con la ID dada desde la base de datos de Realm, actualizaría la instancia de Task obtenida en un Transaction block , realm.copyFromRealm(updatedTask); Y cierre la instancia de Realm al final del método.

 Realm realm = Realm.getDefaultInstance(); realm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { // fetch the object from Realm database and update it as required. //https://realm.io/docs/java/latest/api/io/realm/Realm.html#copyFromRealm-E- // Makes an unmanaged in-memory copy of an already persisted RealmObject. realm.copyFromRealm(task); } } }); realm.close(); 

Funcionó para mí. Si hay un enfoque mejor me gustaría saber más.

  • Realm findAllSorted por el campo de un archivado
  • Cambiar el tipo de datos del campo Realm - Java
  • Cómo lograr lo siguiente en Realm para android
  • ¿Puedo tener arrayList de cadena en objeto de reino android
  • Manera correcta de abstraer el reino en las aplicaciones de Android
  • Realm + Retrofit + Rxjava
  • Error: java.lang.UnsatisfiedLinkError con roboelectric y reino
  • Realm: cómo cerrar una instancia de dominio con una transacción asíncrona
  • Android Realm - Objeto de Realm de paso usando Intent
  • Inyección de dependencia en servicio
  • Acceso al dominio desde un subproceso incorrecto Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.