Ich führe einige Untersuchungen von Realm
Threading und aufgetretene Problem.Schreiben und Lesen zwischen Threads mit Android Realm
In diesem einfachen Beispiel habe ich 2 Thread
Objekte, eines zum Schreiben und das zweite zum Lesen. Der Leser Thread
erhält die Anzahl der geschriebenen Objekte immer als 0, aber innerhalb des Schreiberumfangs ist die size()
für Objekte in DB korrekt. Wenn ich die App neu starte, erhält der Leser die erste Zählung vor jeder Einfügung.
Thread writer = new Thread() {
@Override
public void run() {
while (mRunning) {
try {
Realm r = Realm.getInstance(context, "test_db");
r.beginTransaction();
TestData data = r.createObject(TestData.class);
r.commitTransaction();
Logger.e("WRITER THREAD COUNT: " +
r.where(TestData.class).findAll().size());
sleep(LATENCY);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
writer.setPriority(Thread.MAX_PRIORITY);
writer.start();
Thread reader = new Thread() {
@Override
public void run() {
while (mRunning) {
try {
Logger.e("READING THREAD COUNT: " + Realm.getInstance(context,
"test_db").where(TestData.class).findAll().size());
sleep(LATENCY);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
reader.setPriority(Thread.MAX_PRIORITY);
reader.start();
Gibt es etwas zu tun, damit dies funktioniert?
Danke.
Technisch '.refresh()' existiert nicht mehr, aber Sie können ein "looper thread" Auto-Update mit ['waitForChange()/stopWaitForChange()'] emulieren (https://gist.github.com/cmelchior/8786ec511f7e1f47673935a26f568106) – EpicPandaForce