有人能和一个循环器共享一个后台线程的实现吗?我可以把它传递给subscribeOn(AndroidScheduler.from(/backgroundThreadWithLooper/))。
我之所以需要这个函数,是因为我试图实现一个DBService类,它在后台运行所有操作,同时仍然获取实时对象更新,所以当我应用addChangeListener时,会抛出一个异常:
java.lang.IllegalStateException: Your Realm is opened from a thread without a Looper. Async queries need a Handler to send results of your query
或者如果我使用findAll()而不是findAllAsync():
java.lang.IllegalStateException: You can't register a listener from a non-Looper thread or IntentService thread.
数据库服务代码:
public Observable<List> getAll(Class clazz) {
return Observable.defer(() -> {
Realm realm = Realm.getDefaultInstance();
return realm.where(clazz).findAll().asObservable()
.map(o -> realm.copyFromRealm((RealmResults) o))
.doOnUnsubscribe(() -> closeRealm(realm))
.doOnTerminate(() -> closeRealm(realm));
});
}
3条答案
按热度按时间qacovj5a1#
HandlerThread完成了这项工作。
relj7zay2#
这似乎对我有用
以及
结果
因此HandlerThread领域能够接收自动更新。
从Realm复制仍然会导致对结果的急切评估,因此这不是处理大型数据集的有效方法。
ha5z0ras3#
这是一个带活套的线程示例: