RxSwift - 没有冻结UI的后台任务

问题描述 投票:4回答:1

我想在我的iOS应用程序的后台线程中做一些繁重的工作,而不是在执行时冻结UI。我尝试的是:

self.someDisposable = heavyLiftingFuncReturningObservable()
            .subscribeOn(ConcurrentDispatchQueueScheduler(qos: .background))
            .observeOn(MainScheduler.instance)
            .subscribe(
                onNext: { [weak self] image in
                    // update UI
                },
                onError: { ... }
            )

为什么以上不能按预期工作以及如何使其工作?

ios swift multithreading rx-swift
1个回答
4
投票

我相信问题在于你的.heavyLiftingFuncReturningObservable()的实现,即显然它开始在当前线程上工作而不是等到订阅并在后台调度程序上运行。解决方法是在.heavyLiftingFuncReturningObservable()函数中使用.deferred()。

http://adamborek.com/top-7-rxswift-mistakes/

© www.soinside.com 2019 - 2024. All rights reserved.