Version 1.1.7 - July 10, 2016 (Maven)
This release has several documentation fixes (AsyncSubject, doOnEach, cache, scan, reduce, backpressure descriptions) and internal cleanups based on tool feedback (code-coverage and PMD).
Warning: behavior change in the time-bound replay() operator: the aging of the values continues after the termination of the source and thus late subscribers no longer get old data. For example, a given just(1).replay(1, TimeUnit.MINUTE) a subscriber subscribing after 2 minutes won't get 1 but only onCompleted.
Warning: behavior change in timestamp() and timeInterval() (no arguments) operators: they now take timing information from the computation scheduler instead of the immediate scheduler. This change now allows hooking these operators' time source.
Warning: the parameter order of Completable.subscribe(onError, onComplete) has been changed to Completable.subscribe(onComplete, onError) to better match the callback order in the other base reactive classes, namely the most significant signal comes first (Observer.onNext, SingleSubscriber.onSuccess, and now CompletableSubscriber.onCompleted).
The new RxJavaHooks API
PR #4007 introduced a new way of hooking into the lifecycle of the base reactive types (Observable, Single, Completable) and the Schedulers. The original RxJavaPlugins' design was too much focused on class-initialization time hooking and didn't properly allow hooking up different behavior after that. There is a reset() available on it but sometimes that doesn't work as expected.
The new class rx.plugins.RxJavaHooks allows changing the hooks at runtime, allowing tests to temporarily hook onto an internal behavior and then un-hook once the test completed.
RxJavaHooks.setOnObservableCreate(s -> {
System.out.println("Observable created");
return s;
});
Observable.just(1).subscribe(System.out::println);
RxJavaHooks.reset();
// or
RxJavaHooks.setOnObservableCreate(null);
It is now also possible to override what Schedulers the Schedulers.computation(), .io() and .newThread() returns without the need to fiddle with Schedulers' own reset behavior:
RxJavaHooks.setOnComputationScheduler(current -> Schedulers.immediate());
Observable.just(1).subscribeOn(Schedulers.computation())
.subscribe(v -> System.out.println(Thread.currentThread()));
By default, all RxJavaHooks delegate to the original RxJavaPlugins callbacks so if you have hooks the old way, they still work. RxJavaHooks.reset() resets to this delegation and RxJavaHooks.clear() clears all hooks (i.e., everything becomes a pass-through hook).
API enhancements
- Pull 3966: Add multi-other
withLatestFrom operators.
- Pull 3720: Add vararg of
Subscriptions to composite subscription.
- Pull 4034:
distinctUntilChanged with direct value comparator - alternative.
- Pull 4036: Added zip function with Observable array.
- Pull 4020: Add
AsyncCompletableSubscriber that exposes unsubscribe().
- Pull 4011: Deprecate
TestObserver, enhance TestSubscriber a bit.
- Pull 4007: new hook management proposal
- Pull 3931: add
groupBy overload with evictingMapFactory
- Pull 4140: Change
Completable.subscribe(onError, onComplete) to (onComplete, onError)
- Pull 4154: Ability to create custom schedulers with behavior based on composing operators.
API deprecations
- Pull 4011: Deprecate
TestObserver, enhance TestSubscriber a bit.
- Pull 4007: new hook management proposal (deprecates some
RxJavaPlugins methods).
Performance enhancements
- Pull 4097: update
map() and filter() to implement OnSubscribe directly.
- Pull 4176: Optimize collect, reduce and takeLast(1)
Bugfixes
- Pull 4027: fix
Completable.onErrorComplete(Func1) not relaying function crash.
- Pull 4051: fix
ReplaySubject anomaly around caughtUp by disabling that optimization.
Version 1.1.7 - July 10, 2016 (Maven)
This release has several documentation fixes (
AsyncSubject,doOnEach,cache,scan,reduce, backpressure descriptions) and internal cleanups based on tool feedback (code-coverage and PMD).Warning: behavior change in the time-bound
replay()operator: the aging of the values continues after the termination of the source and thus late subscribers no longer get old data. For example, a givenjust(1).replay(1, TimeUnit.MINUTE)a subscriber subscribing after 2 minutes won't get1but onlyonCompleted.Warning: behavior change in
timestamp()andtimeInterval()(no arguments) operators: they now take timing information from thecomputationscheduler instead of theimmediatescheduler. This change now allows hooking these operators' time source.Warning: the parameter order of
Completable.subscribe(onError, onComplete)has been changed toCompletable.subscribe(onComplete, onError)to better match the callback order in the other base reactive classes, namely the most significant signal comes first (Observer.onNext,SingleSubscriber.onSuccess, and nowCompletableSubscriber.onCompleted).The new RxJavaHooks API
PR #4007 introduced a new way of hooking into the lifecycle of the base reactive types (
Observable,Single,Completable) and theSchedulers. The originalRxJavaPlugins' design was too much focused on class-initialization time hooking and didn't properly allow hooking up different behavior after that. There is areset()available on it but sometimes that doesn't work as expected.The new class
rx.plugins.RxJavaHooksallows changing the hooks at runtime, allowing tests to temporarily hook onto an internal behavior and then un-hook once the test completed.It is now also possible to override what
Schedulers theSchedulers.computation(),.io()and.newThread()returns without the need to fiddle withSchedulers' own reset behavior:By default, all
RxJavaHooksdelegate to the originalRxJavaPluginscallbacks so if you have hooks the old way, they still work.RxJavaHooks.reset()resets to this delegation andRxJavaHooks.clear()clears all hooks (i.e., everything becomes a pass-through hook).API enhancements
withLatestFromoperators.Subscriptions to composite subscription.distinctUntilChangedwith direct value comparator - alternative.AsyncCompletableSubscriberthat exposesunsubscribe().TestObserver, enhanceTestSubscribera bit.groupByoverload withevictingMapFactoryCompletable.subscribe(onError, onComplete)to(onComplete, onError)API deprecations
TestObserver, enhanceTestSubscribera bit.RxJavaPluginsmethods).Performance enhancements
map()andfilter()to implementOnSubscribedirectly.Bugfixes
Completable.onErrorComplete(Func1)not relaying function crash.ReplaySubjectanomaly around caughtUp by disabling that optimization.