如何在Android中的多个后台服务中保持Realm最新?

时间:2018-02-08 12:16:55

标签: android service realm

我试图在一个服务上写入数据并从另一个服务访问它。 我从其他服务获得的数据未更新,它是旧版本。 重启应用程序有时会获得更新的数据。 这些服务都是正常的Service扩展,因此只有UI线程。 而且我没有在应用中的任何位置打开任何realm个实例。 我如何确保它始终是新的和更新的?

写作 -

data使用realm.copyFromRealm(...)

分离
try (Realm realm = Realm.getDefaultInstance()) {
    if (realm != null) {
        realm.executeTransaction(new Realm.Transaction() {
            @Override
            public void execute(@NonNull Realm realm) {
                data.setValue("New value ...");

                realm.insertOrUpdate(data);
            }
        });
    }
}

阅读 -

Data data = null;
try (Realm realm = Realm.getDefaultInstance()) {
    if (realm != null) {
        realm.executeTransaction(new Realm.Transaction() {
            @Override
            public void execute(@NonNull Realm realm) {
                data = realm.copyFromRealm(realm.where(Data.class).equalTo("Id", id).findFirst());
            }
        });
    }
}

数据 -

public class Data {
    ...
    private String Value;        
    public String getValue() { return Value; }
    public void setValue(String v) { Value = v; }
    ...
}

编辑 -

我最终将两种服务合并为一种,现在可以使用。但是,如果有人能提供一些提示或有类似的问题,我会期待。

1 个答案:

答案 0 :(得分:0)

  

我如何确保它始终是新的并更新?

请勿使用copyFromRealm()。并使用RealmResults字段变量+ RealmChangeListener

 RealmResults<T> results;
 RealmChangeListener<RealmResults<T>> listener = new RealmChangeListener<...>() {
    @Override public void onChange(RealmResults<T> results) {
         ...
    }
 }


 public void something() {
    results = realm.where(...).findAll*();
    results.addChangeListener(