Ho letto molti post su questo argomento, ma è ancora un po 'oscuro per me. Comprendo che non è possibile accedere agli oggetti di classe o realm Realm
attraverso thread diversi, quindi mi chiedo quale sia il modo ottimale per gestirli.Accesso al dominio attraverso i thread con rxjava e dagger2
Ho un servizio che avvia una discussione. Quel thread funziona in background (incluso il lavoro tramite rxjava
su Schedulers.io
). Ora ad un certo punto voglio salvare alcuni dati nel regno che vive in una classe DataManager. Inizialmente stavo usando Dagger2
per iniettare Realm
nella mia classe DataManager (che è stata iniettata direttamente nel servizio). Tuttavia, ciò non funzionerà poiché l'iniezione è stata eseguita sul thread principale, pertanto Realm.getDefaultInstance()
è collegato al thread principale ma è accessibile in DataManager da un thread diverso.
L'unica opzione possibile che posso pensare è chiamare Realm.getDefaultInstance()
e realm.close()
all'inizio e alla fine di ogni metodo che sta eseguendo una transazione. Non mi dispiace farlo, ma mi chiedo se ci sarà un successo in termini di prestazioni chiamando lo Realm.getDefaultInstance()
ogni volta che voglio salvare un oggetto. C'è un modo migliore per farlo? Grazie in anticipo.
'Realm.getDefaultInstance()' sarà un po 'lento se è la prima istanza tra tutti i thread. Altrimenti, ritorna istantaneamente dal momento che Realm sta memorizzando nella cache gli schemi internamente. Vedi https://github.com/realm/realm-java/issues/2231 – beeender
FYI Ho deciso di abbandonare il Realm per il mio caso d'uso specifico. Fondamentalmente avevo bisogno di fare un 'copyFromRealm' su tutti i miei oggetti recuperati in modo che potessi passarli attraverso i thread e quindi il beneficio del live object era praticamente fuori dalla porta. Era anche una vernice per gestire le istanze di realm di chiusura all'interno delle classi di helper. Sono sicuro che c'è un modo migliore per gestire questo, ma abbiamo deciso di attenerci a sqlite e un orm. – pat