【问题标题】:Writing and reading between threads with Android Realm使用 Android Realm 在线程之间读写
【发布时间】:2015-01-25 07:10:13
【问题描述】:

我正在对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();

是否需要做一些事情才能使它起作用?

谢谢。

【问题讨论】:

    标签: android multithreading realm


    【解决方案1】:

    来自 Realm 的 Emanuele。

    您所描述的是预期行为 :) 由于阅读器线程没有Looper,因此它无法从阅读器线程接收通知并且永远不会更新,除非您手动执行refresh

    在 out repo 中,我们有几个使用线程的示例(更不用说单元测试),有和没有Looper,说明了当前的最佳实践。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多