一段时间后,Observable似乎没有调用onNext

时间:2016-01-18 15:24:27

标签: android arraylist observable rx-android subscriber

我正在使用RxAndroid库来处理使用订阅者/可观察模式的项目列表。 我的问题是,当处理项目时,有一个需要更新的进度条。但是在处理了16个项之后,似乎observable在处理剩余的项(90)之后不调用onNext方法,然后在onNext方法上调用90次。为什么会这样?这可能是一个记忆问题吗?

以下代码。

订户:

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)));
}

该方法认识到处理图像的辛苦工作,我首先想到的是这种方法消耗了大量内存,并且在完成所有方法调用之前,observable无法将处理后的项目传递给订阅者。但我不确定,有人能证实吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

嗯,我想我已经解决了!问题是使用flatMap而不是concatMap。这里有很好的解释:http://fernandocejas.com/2015/01/11/rxjava-observable-tranformation-concatmap-vs-flatmap/