Observableが存在し、非常に大きな(10,000以上の)要素のシーケンスを生成すると仮定します。この観察可能なスレッドはバックグラウンドスレッドで動作し、結果をUIスレッドに渡します。ここで、RecyclerViewアダプタは各文字列を追加します。Android、RX:UIスレッドには何がありますか - コレクションまたは要素ですか?
-
自体の観察可能で
- (EMITないコレクションが、ストリング)、ワーカースレッド上で一般に 、別の文字列にリストのそれぞれを分割する2つのアプローチが存在します。
- サブスクライバでは、UIスレッドです。
最初のケースでは、UIが少し仕事をします。 応答性 しかし、オーバーヘッドによりスレッド間で各文字列を転送するため、データ処理の全体的な時間も大幅に伸び、アプリケーションのパフォーマンスが低下する可能性があります。
どのようなアプローチが望ましいと思いますか?
例コード。
アプローチ1、バックグラウンドスレッドでの処理データ:
Observable.create(subscriber -> { // Data is transferred from background to UI thread 10,000 times. for (int i = 0; i < 10000; i++) subscriber.onNext("String " + i); }) .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.newThread()) .subscribe(data -> RecyclerView.Adapter adapter = ...; // UI holds for processing just one string. adapter.add(data); });
アプローチ2、UIスレッド上の処理データ:
Observable.create(subscriber -> { Collection<String> data = new ArrayList<>(); for (int i = 0; i < 10000; i++) data.add("String " + i); // Data transfers from background to UI thread only once subscriber.onNext(data); }) .observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.newThread()) .subscribe(data -> { RecyclerView.Adapter adapter = ...; // Long operation, UI waits until all 10,000 element will be processed. for (String e : data) adapter.add(e); });
私は2つの異なるアプローチがどのように見えるかわかりません。コードを追加できますか?私は通常ちょうど私の加入者は、リスト
追加のために想像しているかわからないんだけど、たとえばコードを来ります。 – Alexey