Ho un problema con la comprensione di ciò che è buona pratica alla chiusura dell'istanza di Realm, ogni volta che eseguo una transazione asincrona.Realm - come chiudere l'istanza del realm con una transazione asincrona
Nella mia applicazione ho molti controller e non li passo all'istanza di Realm dall'attività, invece ne creo uno nuovo ogni volta che è necessario e lo chiudo non appena il lavoro è terminato.
Tuttavia recentemente ho scoperto che non funziona correttamente, se sto chiudendo l'istanza del realm quando sta eseguendo una transazione asincrona.
Realm cacheRealm = RealmDelegate.getCacheRealm();
cacheRealm.executeTransaction(realm -> {
doSomeWork(response);
realm.copyToRealmOrUpdate(response);
}, callback);
cacheRealm.close();
Questo codice è sopra un grosso problema, che non è mai richiamata lanciato, dal momento che sto chiudendo esempio regno prima operazione è terminata.
Pertanto non sono sicuro di come dovrei gestire questa situazione. Dovrei passare l'istanza dell'oggetto Realm in ogni controller da attività o frammenti e gestire la chiusura delle istanze di realm solo da quelle parti? O forse ci sono altre soluzioni più eleganti a questo problema?
Un'altra cosa che mi sto chiedendo è che cosa accadrà, se non chiuderò il Realm db, e c'è un modo per verificare se tutte le istanze di Realm sono state chiuse?
Questo ha piccolo problema, dal momento che sto costruendo richiamata in altra classe, quindi avrei bisogno di creare un'istanza Realm laggiù. Ma immagino sia meglio che avere un'istanza in Activity o Fragment. Come per la seconda parte della domanda, c'è un modo per controllare se tutte le istanze sono state chiuse? –
No, puoi usare 'Realm.isClosed' ma questo controllerà solo l'istanza sul thread corrente. –
È possibile creare un altro callback e richiamare la richiamata originale passata da altre classi nel callback creato. – zaki50