2017-11-09 3 views
1

iOSアプリケーションのバックグラウンドスレッドで重労働をして、実行中にUIをフリーズさせたくありません。私は何をしようとすると、次のとおりです。RxSwift - UIをフリーズしないバックグラウンドタスク

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

がなぜ期待通り以上が動作しませんし、それを動作させるためにどのように?

+0

Observable 'lazy'が助けになると思います。 '.background'キューから必要になったときに実際に呼び出され、定義されていないときには実際に呼び出されるようになります。 –

+0

残念ながら、UIはとにかくフリーズします。 – dobranoc

答えて

1

私はこの問題は、つまり、明らかではなくに加入されるまで待機していると、バックグラウンドスケジューラ上で実行されているの現在のスレッド上で作業を開始し、実際に、.heavyLiftingFuncReturningObservable()の実装であると考えています。そのための解決策は、.defered()の内部に.heavyLiftingFuncReturningObservable()の機能を使用することです。 http://adamborek.com/top-7-rxswift-mistakes/

関連する問題