使用领域查询和返回项目的非托管结果的正确方法是什么,后台线程中的所有内容?我正在使用像这样的somethibf:
return Observable.just(1)
.subscribeOn(Schedulers.io())
.map {
val realm = Realm.getDefaultInstance()
val results = realm.where(ItemRealm::class.java)
.equalTo("sent", false).findAll()
realm to results
}
.map {
val (realm, results) = it
val unManagedResults = realm.copyFromRealm(results)
realm.close()
unManagedResults
}
}
然后用另一个将结果发布到服务器上来链接这个observable。
解决方案有效,虽然在这方面有点难看:
Observable.just(1)
。在第一张和第二张地图中,不是打开和关闭Realm实例的最佳位置
我不知道是否保证在复制完所有项目后关闭领域实例。
那么在后台线程上查询和返回非托管结果的正确方法是什么(某些上下文,我需要将结果发送到服务器,在后台,因为此任务完全独立于我的app当前数据流,所以它应该脱离主线程。)
推荐版本:
return Observable.fromCallable {
Realm.getDefaultInstance().use { realm ->
realm.copyFromRealm(
realm.where(ItemRealm::class.java)
.equalTo(ItemRealm.FIELD_SEND, false).findAll()
)
}
}
答案 0 :(得分:1)
这就是你如何将你的Realm对象解除管理:
return Observable.defer(() -> {
try(Realm realm = Realm.getDefaultInstance()) {
return Observable.just(
realm.copyFromRealm(
realm.where(ItemRealm.class).equalTo("sent", false).findAll()
)
);
}
}).subscribeOn(Schedulers.io());
虽然这个答案是Java,但Kotlin的答案只有半步之遥。