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%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%