我使用的是领域数据库、意图服务和UI,因为它是不能调用的库的一部分,也不能设置领域的默认值,所以我对每个意图都使用Realm.getInstance(配置)来检索领域,并且因为我不能重用领域而不知道我将在哪个线程上运行,所以也不能使用异步写入。
因此,每次我写一条记录时,我都会得到以下错误
“应避免将异步查询与本地写入混合使用。Realm会将所有异步查询转换为同步查询,以便保持一致。请改用异步写入。”
我猜想作者所谓的“本地写”是指“同步”?
根据我对此场景中的领域利用的理解,我不认为有任何替代方案?
从Intent Service场景中编写对象的正确方法是:
Realm realm = getNewRealmInstance();
try {
realm.beginTransaction();
Record newRecord = new Record().setField1(x).setField2(y);
realm.copyToRealm(newRecord);
realm.commitTransaction();
} catch (Throwable error) {
realm.cancelTransaction();
} finally {
realm.close();
}此外,我还收到了以下日志消息(没有抛出异常)
E/REALM_JNI: jni: ThrowingException 7, std::exception in /Users/zaki/fromgit/realm/realm-java/realm/realm-library/src/main/cpp/io_realm_internal_TableQuery.cpp line 1285, .
E/REALM_JNI: Exception has been throw: std::exception in /Users/zaki/fromgit/realm/realm-java/realm/realm-library/src/main/cpp/io_realm_internal_TableQuery.cpp line 1285发布于 2016-11-11 04:15:47
“应避免将异步查询与本地写入混合使用。Realm会将所有异步查询转换为同步查询,以便保持一致。请改用异步写入。”
只有在UI线程上执行同步写入时,才会收到此警告。当然你可以确保你不会在UI线程上编写代码?
这适用于intent服务:
Realm realm = getNewRealmInstance();
try {
realm.executeTransaction(new Realm.Transaction() {
public void execute(Realm realm) {
Record newRecord = new Record().setField1(x).setField2(y);
realm.insert(newRecord);
}
});
} finally {
realm.close();
}https://stackoverflow.com/questions/40533242
复制相似问题