Sto eseguendo alcune indagini sul threading Realm
e sul problema riscontrato.Scrittura e lettura tra thread con Android Realm
In questo semplice esempio sono presenti 2 oggetti Thread
, uno per la scrittura e il secondo per la lettura. Il lettore Thread
ottiene il conteggio degli oggetti scritti sempre come 0, ma all'interno dello scope del writer lo size()
per gli elementi nel DB è corretto. Quando rilancio l'app, il lettore ottiene il primo conteggio ok prima di qualsiasi inserimento.
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();
C'è qualcosa da fare perché funzioni?
Grazie.
Tecnicamente '.refresh()' non esiste più, ma è possibile emulare un aggiornamento automatico "thread looper" utilizzando ['waitForChange()/stopWaitForChange()'] (https://gist.github.com/cmelchior/8786ec511f7e1f47673935a26f568106) – EpicPandaForce