mRunSubscription = Observable.from(taskList)
.concatMap(new Func1<String, Observable<? extends String>>() {
@Override
public Observable<? extends String> call(final String s) {
return Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(final Subscriber<? super String> subscriber) {
int tmpTime = Common.string2Int(s);
tmpTime = tmpTime *1000;
LogUtil.d("sunny=tmpTime", tmpTime + "");
subscriber.onNext(s+"");
final CnSunnyCountDownTimer countDownTimer = new CnSunnyCountDownTimer(tmpTime, 1000) {
@Override
public void onTick(long millisUntilFinished, int percent) {
LogUtil.d("sunny=onTick", millisUntilFinished + "");
subscriber.onNext(millisUntilFinished+"");
}
@Override
public void onFinish() {
subscriber.onNext("onFinish");
subscriber.onCompleted();
}
};
countDownTimer.start();
}
});)
.subscribe(new Observer<String>() {
@Override
public void onCompleted() {
LogUtil.d("sunny", "onCompleted");
//结束,发送结束的串口指令
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(String str) {
LogUtil.d("sunny-onNext", str);
}
});
最近遇到了一个工作程序的问题,用
rxjava的Observable的.from.concatMap
解决了。
.from直接发送一个 List 集合数据给观察者
.concatMap将事件序列中的元素进行整合加工,返回一个新的被观察者;
可以调用多次
subscriber.onNext();
只有发送 subscriber.onCompleted();结束时才会进入下一个from集合中的被被观察者。
这样就解决了在一个大流程里面嵌套小流程的问题