后台线程中的写入与UI线程中的对象之间的域间延迟?

时间:2016-06-28 19:26:40

标签: android multithreading background realm

在我的应用程序中,我通过后台线程中的领域事务同步我的所有数据。但是,偶尔当我尝试在UI线程中检索最近同步的对象时,我会得到一个空指针异常。我编写了一个例程,似乎是解决这个小延迟问题,但感觉就像一个“hacky”解决方案。任何指导将不胜感激。我已经发布了以下例程的简化版本。

private void attemptToEnterActivity(){

    // Retrieve the object's key.
    String key = Application.getInstance().getRecentlySyncedPrimaryKey();

    // Retrieve the realm object with the key.
    Realm realm = Realm.getDefaultInstance();
    Object object = realm.where(Object.class)
            .equalTo("key", key)
            .findFirst();

    if (object != null) {
        new NavigationController(this).activity_start(new Intent(this, Activity.class));
    } else {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                attemptToEnterActivity();
            }
        }, 200);
    }
}

1 个答案:

答案 0 :(得分:0)

建议使用RealmChangeListener,而不是猜测何时会提取和存储对象。有关详细信息,请参阅文档here

在您的情况下,您还可以使用Realm的异步查询,如:

RealmResults<Object> results = realm.where(Object.class)
        .equalTo("key", key).findAllAsync();
results.addChnageListener(newRealmChangeListener<RealmResults<Object>>() {
        @Override
        public void onChange(RealmResults<Object> objects) {
            if (objects.size() > 0) {
                Object object = objects.first();
                // ....
            }
        }
    });