package com.mcxtzhang.rxjava2demo.lifecycle;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import com.mcxtzhang.rxjava2demo.R;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.ObservableSource;
import io.reactivex.ObservableTransformer;
import io.reactivex.Observer;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Predicate;
import io.reactivex.observers.DisposableObserver;
import io.reactivex.schedulers.Schedulers;
public class CstRxLifecycleActivity extends AppCompatActivity {
private static final String TAG = "zxt/RxLifeCycle";
CompositeDisposable mCompositeDisposable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cst_rx_lifecycle);
mCompositeDisposable = new CompositeDisposable();
final Observable<String> observable = Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> e) throws Exception {
Log.e(TAG, " subscribe: 就算被取消了 也是会执行的吗?");
try {
Thread.sleep(3000);
} catch (InterruptedException e3) {
e3.printStackTrace();
}
Log.e(TAG, "源头还是会执行,但不一定会发射");
if (!e.isDisposed()) {
e.onNext("1");
e.onNext("2");
Log.e(TAG, "源头还是在biubiubiu发射");
e.onComplete();
}
}
}).subscribeOn(Schedulers.io());
findViewById(R.id.btnOther).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
observable.subscribeOn(Schedulers.io())
.observeOn(Schedulers.computation())
.compose(new ObservableTransformer<String, String>() {
@Override
public ObservableSource<String> apply(Observable<String> upstream) {
return upstream.takeUntil(new Observable<String>() {
@Override
protected void subscribeActual(final Observer<? super String> observer) {
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(1500);
Log.d(TAG, "这个事件发送,触发takeUtil");
observer.onNext("5");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
});
}
})
.observeOn(Schedulers.io())
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
Log.d(TAG, "onSubscribe() called with: d = [" + d + "]");
}
@Override
public void onNext(String value) {
Log.d(TAG, "onNext() called with: value = [" + value + "]");
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "onError() called with: e = [" + e + "]");
}
@Override
public void onComplete() {
Log.d(TAG, "onComplete() called");
}
});
}
});
findViewById(R.id.btnIf).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
observable.subscribeOn(Schedulers.io())
.observeOn(Schedulers.computation())
.compose(new ObservableTransformer<String, String>() {
@Override
public ObservableSource<String> apply(Observable<String> upstream) {
return upstream.takeUntil(new Predicate<String>() {
@Override
public boolean test(String s) throws Exception {
return true;
}
});
}
})
.observeOn(Schedulers.io())
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
Log.d(TAG, "onSubscribe() called with: d = [" + d + "]");
}
@Override
public void onNext(String value) {
Log.d(TAG, "onNext() called with: value = [" + value + "]");
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "onError() called with: e = [" + e + "]");
}
@Override
public void onComplete() {
Log.d(TAG, "onComplete() called");
}
});
}
});
findViewById(R.id.btnDispodeTest).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DisposableObserver<String> disposableObserver = observable.subscribeOn(Schedulers.io())
.observeOn(Schedulers.computation())
.compose(new ObservableTransformer<String, String>() {
@Override
public ObservableSource<String> apply(Observable<String> upstream) {
return upstream.takeUntil(new Predicate<String>() {
@Override
public boolean test(String s) throws Exception {
return true;
}
});
}
})
.observeOn(Schedulers.io())
.subscribeWith(new DisposableObserver<String>() {
@Override
public void onNext(String value) {
Log.d(TAG, "onNext() called with: value = [" + value + "]");
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "onError() called with: e = [" + e + "]");
}
@Override
public void onComplete() {
Log.d(TAG, "onComplete() called");
}
});
mCompositeDisposable.add(disposableObserver);
findViewById(R.id.btnDispode).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mCompositeDisposable.dispose();
}
});
}
});
}
/* public <T> ObservableTransformer<T, T> bindUntilEvent(@NonNull final ActivityLifeCycleEvent event) {
return new ObservableTransformer<T, T>() {
@Override
public ObservableSource<T> apply(Observable<T> upstream) {
Observable<ActivityLifeCycleEvent> compareLifecycleObservable =
lifecycleSubject.takeFirst(new Func1<ActivityLifeCycleEvent, Boolean>() {
@Override
public Boolean call(ActivityLifeCycleEvent activityLifeCycleEvent) {
return activityLifeCycleEvent.equals(event);
}
});
return upstream.takeUntil(compareLifecycleObservable);
}
};
}*/
}