gpt4 book ai didi

android - 如何使用循环器创建后台线程

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:56:33 27 4
gpt4 key购买 nike

有人可以分享带有 Looper 的后台线程的实现,我可以将其传递给 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));
});
}

最佳答案

HandlerThread 完成这项工作。

HandlerThread handlerThread = new HandlerThread("backgroundThread");
if (!handlerThread.isAlive())
handlerThread.start();
AndroidSchedulers.from(handlerThread.getLooper());

关于android - 如何使用循环器创建后台线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41770875/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com