1

RxAndroid ライブラリを使用して、サブスクライバー/オブザーバブル パターンを使用してアイテムのリストを処理しています。私の問題は、アイテムが処理されると、更新が必要な進行状況バーがあることです。しかし、16 個のアイテムを処理した後、残りのアイテム (90 個) が処理されてから onNext メソッドを 90 回呼び出すまで、オブザーバブルは onNext メソッドを呼び出していないようです。なぜこうなった?これはメモリの問題ですか?

以下のコード。

加入者:

public void startSingleRecognition(int id, int position) {
    mAdapter.updateItemProgress(0, position);
    Uri imageUri = Uri.parse(getHpCard(id).getUrlImage());
    final int[] i = {0};
    mSubscription = mRecognitionUtils
            .getRecognitionObservable(imageUri, configurations)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(
                    abbyResult -> mAdapter.updateItemProgress(++i[0], position),
                    e -> e.printStackTrace(),
                    () ->  mAdapter.updateItemProgress(-1, position));

}

観測可能:

public Observable<AbbyResult> getRecognitionObservable(Uri imageUri,
        ArrayList<Configuration> configurations) {
    return Observable.from(configurations)
            .flatMap(
                    configuration -> Observable.just(recognize(imageUri, configuration, this)));
}

メソッドを認識して画像を処理するのは大変です。最初に考えたのは、このメソッドは多くのメモリを消費しており、すべてのメソッド呼び出しが完了するまで、オブザーバブルは処理されたアイテムをサブスクライバーに配信できないということでした。しかし、私は本当に確信が持てません、誰かがこれを確認できますか?

ありがとう!

4

1 に答える 1

1

まあ、私はそれを解決したと思います!問題は、concatMap の代わりに flatMap を使用していたことです。ここでよく説明されています:http://fernandocejas.com/2015/01/11/rxjava-observable-tranformation-concatmap-vs-flatmap/

于 2016-01-18T16:10:18.510 に答える