2015-01-05 7 views
5

Ich habe versucht, Realm-Objekte zu vermeiden, in meiner Android-Anwendung für jedes Fragment. Ich denke, ThreadLocalVariable könnte ein guter Anfang sein.Wie man richtig Realm verwendet

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(); 
    } 
} 

Ich würde nur ein statisches Endziel RealmInstanceGenerator in meiner utils Singletonklasse und rufen setRealmForCurrentThread in meinem MainActivity erstellen. Dann werde ich entfernen, wenn meine Aktivität stirbt. Für jeden neuen Thread wird automatisch ein neues Realm-Objekt generiert. Ist es eine gute Strategie?

+0

Ich schrieb [dieses Handbuch für Realm 1.2.0] (https://medium.com/@Zhuinden/basics-of-realm-a-guide-to-using-realm-1-2-0-0634471c0fe8f#.sltph3ynl) – EpicPandaForce

Antwort

20

Christian aus dem Reich hier. Es ist eine gute Strategie, und zum Glück haben wir es bereits für Sie implementiert :) Alle Realm-Instanzen werden bereits in einem ThreadLocal zwischengespeichert und wir verfolgen Instanzen mit einem Zähler. Der Realm ist erst dann vollständig geschlossen, wenn der Zähler 0 erreicht.

Das bedeutet, solange Sie immer clos() aufrufen (was Sie tun sollten), ist es im Grunde dasselbe wie Ihre remove() -Methode.

Sie können das Muster in diesem Beispiel verwendet sehen hier: https://github.com/realm/realm-java/tree/master/examples/threadExample/src/main/java/io/realm/examples/threads

und der Quellcode für die Realm-Klasse ist hier: https://github.com/realm/realm-java/blob/master/realm/src/main/java/io/realm/Realm.java

+0

Realm Backend basiert auf LMDB? Ist es Open Source wie Fornts? – Maniero