Realm schließt sich selbst

9

Ich verwende eine statische globale Realm-Instanz (niemals geschlossen) für das Anwendungsobjekt, die nur für den UI-Thread verwendet werden kann,

%Vor%

und ein anderer Single-Use-Realm für WorkerThread wie folgt:

%Vor%

Allerdings sehe ich immer noch Abstürze bei der Verwendung einer einzelnen globalen Realm-Instanz: This Realm instance has already been closed, making it unusable.

Ich weiß nicht, wie es überhaupt möglich ist.

So initialisiere ich die Realm-Instanz:

Anwendung onCreate

%Vor%

Hier ist einer der Abstürze von einer der Aktivitäten:

%Vor%

Bei einigen Aktivitäten stürzt diese Zeile auch mit dem gleichen Fehler ab:

mCompositeSubscription.unsubscribe();

Hier ist ein Stacktrace von Crashlytics, möglicherweise nicht ganz genau.

%Vor%     
guness 25.04.2017, 19:44
quelle

2 Antworten

2

Das Problem ist:

  

Eine geschlossene Ausnahme zeigt an, dass Sie versuchen, ein geschlossenes Objekt zu verwenden   Reich, Realm in einer Weise zu verwenden, die nicht als das Beste gefördert würde   trainieren. ... Jede Aktivität soll eine eigene Realm-Instanz haben   für beste Leistung. ... erstellen Sie eine Realm-Instanz bei onCreate () und   zerstöre die Instanz bei onDestory ().    Ссылка

Außerdem

  

... es ist keine gute Idee, ein statisches Feld von Realm in der Klasse zu halten. Es wird empfohlen, den Lebenszyklus des Reiches innerhalb der Aktivität / Fragment / etc zu kontrollieren Ссылка

Da das Erstellen neuer Instanzen in Realm, wenn es mindestens eine offene Instanz gibt, super schnell ist, scheue dich nicht, mehrere Instanzen von Realm zu erstellen.

Ein leitender Softwareingenieur aus Realm weist darauf hin hier :

  

Solange mindestens eine Instanz in einem Thread geöffnet ist, der Realm.getInstance () aufruft, ist es nur ein HashMap-Lookup. Bewährte Methode ist, die Realm-Instanz so lange offen zu lassen, wie der Thread lebt.

Die beste Vorgehensweise wird in der Realm-Dokumentation beschrieben:

%Vor%

Für Worker-Threads empfiehlt die -Dokumentation , am Anfang eine neue Instanz von Realm zu erhalten und schließe es am Ende.

%Vor%     
Philipp Hofmann 04.05.2017 09:37
quelle
0

Ich denke, das Problem liegt bei RealmObservableFactory . Ich habe alle Rx + Realm relations ( .asObservable() etc.) entfernt, alte oldschool-implementation benutzt und es ist gut gelaufen.

    
guness 06.05.2017 09:31
quelle

Tags und Links