2015-01-05 19 views
5

Stavo cercando di evitare di creare e gestire oggetti Realm, nella mia applicazione Android, per ogni frammento. Sto pensando che ThreadLocalVariable potrebbe essere un buon inizio.Come utilizzare correttamente Realm

public class RealmInstanceGenerator extends ThreadLocal<Realm> { 

    public Realm getRealmForMyThread(Context context) { 

     if(get() == null && context != null) 
      super.set(Realm.getInstance(context)); 

     return get(); 
    } 

    public void setRealmForCurrentThread(Context context) { 

     if(context != null) 
      super.set(Realm.getInstance(context)); 
    } 

    @Override 
    protected Realm initialValue() { 
     return null; 
    } 

    @Override 
    public void remove() { 
     if(get() != null) get().close(); 
     super.remove(); 
    } 
} 

vorrei solo creare un oggetto finale statica di RealmInstanceGenerator nei miei utils classe Singleton e chiamare setRealmForCurrentThread nel mio MainActivity. Allora chiamerò remove quando la mia attività muore. Per ogni nuovo thread verrà generato automaticamente un nuovo oggetto Realm. È una buona strategia?

+0

ho scritto [questa guida per Realm 1.2.0] (https://medium.com/@Zhuinden/basics-of-realm-a-guide-to-using-realm-1-2-0-634471c0fe8f#.sltph3ynl) – EpicPandaForce

risposta

20

Cristiano dal Regno qui. È una buona strategia, e per fortuna l'abbiamo già implementata per voi :) Tutte le istanze del Realm sono già state memorizzate nella cache in un ThreadLocal e teniamo traccia delle istanze usando un contatore. Il dominio è completamente chiuso solo quando il contatore raggiunge 0.

Ciò significa che finché si chiama sempre close() (che si dovrebbe), è in pratica lo stesso del metodo remove().

si può vedere il modello usato in questo esempio qui: https://github.com/realm/realm-java/tree/master/examples/threadExample/src/main/java/io/realm/examples/threads

e il codice sorgente per la classe Realm è qui: https://github.com/realm/realm-java/blob/master/realm/src/main/java/io/realm/Realm.java

+0

Il backend del realm è basato su LMDB? È open source come forntends? – Maniero

Problemi correlati