5
Realm
스레딩 및 문제가 발생했습니다.Android Realm을 사용하여 스레드간에 읽고 쓰는 중
이 간단한 예제에서 나는 2 개의 Thread
개체를 가지고 있습니다. 하나는 쓰기 용이고 다른 하나는 읽기 용입니다. 판독기 Thread
은 기록 된 객체의 수를 항상 0으로 가져 오지만 기록기 범위 내에서 DB에있는 항목의 size()
은 정확합니다. 앱을 다시 시작하면 리더는 삽입 전에 첫 번째로 확인한 수를 얻습니다.
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();
이 작업을 수행하기 위해 수행해야 할 작업이 있습니까?
감사합니다.
기술적으로'.refresh()'는 더 이상 존재하지 않지만 ['waitForChange()/stopWaitForChange()'] (https://gist.github.com)을 사용하여 "루퍼 스레드"자동 업데이트를 에뮬레이트 할 수 있습니다./cmelchior/8786ec511f7e1f47673935a26f568106) – EpicPandaForce