gpt4 book ai didi

android - 从主线程调用的 RxAndroid

转载 作者:行者123 更新时间:2023-11-29 14:43:48 25 4
gpt4 key购买 nike

我有这个问题 ;)

我试图调用这个用例,它最后返回一个 Observable。

但是,尽管使用了调度程序,但在主线程上不断被调用。我不知道为什么:

看起来像这样:

class MainViewModel @Inject constructor(private val loadNewsUseCase: LoadNews) : Model {

override fun loadNews() {
loadNewsUseCase.execute(NewsObserver(), "")
}

override fun dispose() {
loadNewsUseCase.dispose()
}
}

class NewsObserver : DisposableObserver<Result>() {
override fun onComplete() {
Log.i("TAG", "")
}

override fun onNext(t: Result) {
Log.i("TAG", "")

}

override fun onError(e: Throwable) {
Log.i("TAG", "")

}
}

-

abstract class UseCase<T, in P>(
private val computationThreadExecutor: ComputationThreadExecutor,
private val mainThreadExecutor: MainThreadExecutor,
private val compositeDisposable: CompositeDisposable = CompositeDisposable()
) {

abstract fun createUseCase(params: P): Observable<T>

fun execute(disposableObserver: DisposableObserver<T>, params: P) {
requireNotNull(disposableObserver)

val observable = createUseCase(params)
.subscribeOn(Schedulers.newThread())
.observeOn(mainThreadExecutor.getThread())

val disposable = observable.subscribeWith(disposableObserver)

addDisposable(disposable)
}

private fun addDisposable(disposable: Disposable) {
requireNotNull(disposable)
compositeDisposable.add(disposable)
}

fun dispose() {
!compositeDisposable.isDisposed.apply { compositeDisposable.dispose() }
}
}

UseCase具体实现使用DataService从api中获取数据,如下所示:

open class NewsDataService(private val newsDataProvider: NewsDataProvider) : NewsService {

override fun loadNews(): Observable<Result> {

return Observable.just(newsDataProvider.fetchData())

}
}

NewsDataProvider 内部是正常的同步改造调用。

问题是,从每个 beginning useCase 开始在 mainThread() 中调用。不应该在新线程中调用?

最佳答案

替换

Observable.just(foo)

用类似的东西

Observable.fromCallable(() -> foo)

Observable.just() 从提供的值创建一个可观察对象,您在主线程上计算该值。 fromCallable() 接受一个可以在您的订阅线程上调用的回调。

关于android - 从主线程调用的 RxAndroid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48854691/

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