2016-05-09 7 views
6

Sto utilizzando l'area di autenticazione per archiviare e recuperare i dati. Di solito, quando apriamo un regno per memorizzare alcuni dati ci piace:Come chiudere il dominio aperto da Realm.getDefaultInstance?

Realm realm = Realm.getDefaultInstance(); 
realm.beginTransaction(); 
// Copy the object to Realm 
realm.copyToRealm(myObject); 
realm.commitTransaction(); 
realm.close(); 

nel caso di cui sopra sto chiudendo il regno.

ma quando sono il recupero di alcuni dati come:

RealmResults<MyClass> results = Realm.getDefaultInstance().where(MyClass.class).findAll(); 

Come faccio a chiudere questo regno? Ha bisogno di essere chiuso?

risposta

13

Facendolo come one-liner significa che non è possibile chiudere il Reame, quindi consiglio di non farlo.

La mancata chiusura del Ream nel caso migliore causa la perdita di memoria e una maggiore probabilità di essere uccisi dal sistema se in background. Nel peggiore dei casi, si noterà un forte aumento dell'utilizzo del disco perché Realm deve tenere traccia di tutte le versioni delle istanze di Realm aperte (essendo un database MVCC).

Consiglio vivamente di utilizzare il primo schema. Per ulteriori informazioni sul controllo delle istanze di Realm, puoi leggere questo: https://realm.io/docs/java/latest/#controlling-the-lifecycle-of-realm-instances e questo https://realm.io/news/threading-deep-dive/

+0

Grazie per il chiarimento. –

+0

Ma per quanto riguarda l'avviso in Logcat che urla 'Ricorda di chiamare close() su tutte le istanze di Realm. Realm /data/data/com.foo.bar/files/default.realm è in fase di completamento senza essere chiuso, questo può portare a esaurire la memoria nativa.? – zxcmehran