Releases: ReactiveX/RxJava
1.1.4
API enhancements
- Pull 3856: Provide factories for creating the default scheduler instances.
- Pull 3866: Add
Single.toCompletable()
. - Pull 3879: Expose scheduler factories which accept thread factories.
- Pull 3820: Making RxPlugins
reset()
public - Pull 3888: New operator:
onTerminateDetach
- detach upstream/downstream for GC
API deprecations
- Pull 3871: Deprecate remaining public scheduler types.
Performance enhancements
- Pull 3761: optimize
merge
/flatMap
for empty sources. - Pull 3864: optimize
concatMapIterable
/flatMapIterable
.
Bugfixes
- Pull 3868: Fix an unsubscribe race in
EventLoopWorker
. - Pull 3867: ensure waiting tasks are cancelled on worker unsubscription.
- Pull 3862: fix
from(Iterable)
error handling of Iterable/Iterator - Pull 3886:
throwIfFatal()
now throwsOnCompletedFailedException
. - Pull 3887: Have undeliverable errors on
subscribe()
sent to plugin error handler. - Pull 3895:
cast()
should unsubscribe on crash eagerly. - Pull 3896:
OperatorMapPair
should unsubscribe on crash eagerly. - Pull 3890:
map()
andfilter()
should unsubscribe on crash eagerly. - Pull 3893: enable backpressure with
from(Future)
- Pull 3883: fix multiple chained
Single.doAfterTerminate
not calling actions - Pull 3904: Fix
Completable
swallowsOnErrorNotImplementedException
- Pull 3905: fix
singleOrDefault()
backpressure if source is empty
1.1.3
API enhancements
- Pull 3780:
SyncOnSubscribe
has been promoted to@Beta
API. - Pull 3799: Added
Completable.andThen(Single)
operator - Pull 3777: Added
observeOn
overload to configure the prefetch/buffer size - Pull 3790: Make
Single.lift
public and@Experimental
- Pull 3818:
fromCallable
promotion to@Beta
- Pull 3842: improve
ExecutorScheduler
worker unsubscription
API deprecations
- Pull 3762: Deprecate
CompositeException
constructor with message prefix
General enhancements
- Pull 3828:
AsyncSubject
now supports backpressure - Pull 3829: Added
rx.unsafe-disable
system property to disable use ofsun.misc.Unsafe
even if it is available - Pull 3757: Warning: behavior change! Operator
sample
emits last sampled value before termination
Performance enhancements
- Pull 3795:
observeOn
now replenishes with constant rate
Bugfixes
- Pull 3809: fix
merge
/flatMap
crash when the inner source wasjust(null)
- Pull 3789: Prevent
Single.zip()
of zeroSingle
s - Pull 3787: fix
groupBy
delaying group completion till all groups were emitted - Pull 3823: fix
DoAfterTerminate
handle if action throws - Pull 3822: make defensive copy of the properties in
RxJavaPlugins
- Pull 3836: fix
switchMap
/switchOnNext
producer retention and backpressure - Pull 3840: fix
concatMap
scalar/empty source behavior - Pull 3839: fix
takeLast()
backpressure - Pull 3845: fix delaySubscription(Observable) unsubscription before triggered
Version 1.1.2 - March 18, 2016
API Enhancements
- Pull 3766: Add
Single.onErrorResumeNext(Func1)
operator - Pull 3765: Add
Observable.switchOnNextDelayError
andObservable.switchMapDelayError
operators - Pull 3759: Add
Observable.concatDelayError
andObservable.concatMapDelayError
operators - Pull 3763: Add
Observable.combineLatestDelayError
operator - Pull 3752: Add
Single.using
operator - Pull 3722: Add
Observable.flatMapIterable
overload withmaxConcurrent
parameter - Pull 3741: Add
Single.doOnSubscribe
operator - Pull 3738: Add
Observable.create(SyncOnSubscribe)
andObservable.create(AsyncOnSubscribe)
factory methods - Pull 3718: Add
Observable.concatMapIterable
operator - Pull 3712: Add
Single.takeUntil(Completable)
operator - Pull 3696: Added Single execution hooks via
RxJavaSingleExecutionHook
class. Warning! This PR introduced a binary incompatible change ofSingle.unsafeSubscribe(Subscriber)
by changing its return type fromvoid
toSubscription
. - Pull 3487: Add
onBackpressureBuffer
overflow strategies (oldest, newest, error)
API deprecations
- Pull 3701: deprecate
Completable.doOnComplete
in favor ofCompletable.doOnCompleted
(note the last d in the method name)
Performance enhancements
- Pull 3759: Add
Observable.concatDelayError
andObservable.concatMapDelayError
operators - Pull 3476: reduced
range
andflatMap/merge
overhead
Bugfixes
- Pull 3768: Fix
observeOn
in-sequence termination/unsubscription checking - Pull 3733: Avoid swallowing errors in
Completable
- Pull 3727: Fix
scan
not requestingLong.MAX_VALUE
from upstream if downstream has requestedLong.MAX_VALUE
- Pull 3707: Lambda-based
Completable.subscribe()
methods should reportisUnsubscribed
properly - Pull 3702: Fix
mapNotification
backpressure handling - Pull 3697: Fix
ScalarSynchronousObservable
expecting theScheduler.computation()
to beEventLoopsScheduler
all the time - Pull 3760: Fix ExecutorScheduler and GenericScheduledExecutorService reorder bug
- Pull 3678: Fix counted buffer and window backpressure
1.1.1
Version 1.1.1 - February 11, 2016 (Maven)
The new Completable
class
- Pull 3444 Completable class to support valueless event composition + tests
What is this Completable class?
We can think of a Completable
object as a stripped version of Observable
where only the terminal events, onError
and onCompleted
are ever emitted; they may look like an Observable.empty()
typified in a concrete class but unlike empty()
, Completable
is an active class. Completable
mandates side effects when subscribed to and it is its main purpose indeed. Completable
contains some deferred computation with side effects and only notifies about the success or failure of such computation.
Similar to Single
, the Completable
behavior can be emulated with Observable<?>
to some extent, but many API designers think codifying the valuelessness in a separate type is more expressive than messing with wildcards (and usually type-variance problems) in an Observable
chain.
Completable
doesn't stream a single value, therefore, it doesn't need backpressure, simplifying the internal structure from one perspective, however, optimizing these internals requires more lock-free atomics knowledge in some respect.
Hello World!
Let's see how one can build a (side-effecting) Hello World Completable
:
Completable.fromAction(() -> System.out.println("Hello World!"))
.subscribe();
Quite straightforward. We have a set of fromXXX
method which can take many sources: Action
, Callable
, Single
and even Observable
(stripping any values generated by the latter 3 of course). On the receiving end, we have the usual subscribe capabilities: empty, lambdas for the terminal events, a rx.Subscriber
and a rx.Completable.CompletableSubscriber
, the main intended receiver for Completable
s.
Further reading
API enhancements
- Pull 3434 Add Single.doAfterTerminate()
- Pull 3447 operator DelaySubscription with plain Observable
- Pull 3498 Rename cache(int) to cacheWithCapacityHint(int)
- Pull 3539 Add Single.zip() for Iterable of Singles
- Pull 3562 Add Single.doOnUnsubscribe()
- Pull 3566 Deprecate Observable.finallyDo() and add Observable.doAfterTerminate() instead
- Pull 3567 Implemented Observable#toCompletable
- Pull 3570 Implemented Completable#andThen(Observable)
- Pull 3627 Added MergeDelay operators for Iterable of Observables
- Pull 3655 Add Single.onErrorResumeNext(Single)
- Pull 3661 CombineLatest now supports any number of sources
- Pull 3682 fix observeOn resource handling, add delayError capability
- Pull 3686 Added retry and retryWhen support for Single
API deprecations
cache(int)
via #3498, replaced bycacheWithCapacityHint(int)
finallyDo(Action0)
via #3566, replaced bydoAfterTerminate(Action0)
Performance improvements
- Pull 3477 add a source OnSubscribe which works from an array directly
- Pull 3579 No more need to convert Singles to Observables for Single.zip()
- Pull 3587 Remove the need for javac to generate synthetic methods
- Pull 3614 just() now supports backpressure
- Pull 3642 Optimizate single just
- Pull 3589 concat reduce overhead when streaming a source
Bugfixes
- Pull 3428 GroupBy backpressure fix
- Pull 3454 fix: bounded replay() not requesting enough for latecommers
- Pull 3467 compensate for drastic clock drifts when scheduling periodic tasks
- Pull 3555 fix toMap and toMultimap not handling exceptions of the callbacks
- Pull 3585 fix Completable.using not disposing the resource if the factory crashes during the subscription phase
- Pull 3588 Fix the initialization order in GenericScheduledExecutorService
- Pull 3620 Fix NPE in CompositeException when nested throws on initCause
- Pull 3630 ConcatMapEager allow nulls from inner Observables.
- Pull 3637 handle predicate exceptions properly in skipWhile
- Pull 3638 fix error handling in OperatorDistinctUntilChanged
- Pull 3639 fix error handling in onBackpressureBuffer
- Pull 3640 fix error handling in onBackpressureDrop
- Pull 3644 fix SyncOnSubscribe not signalling onError if the generator crashes
- Pull 3645 fix Amb sharing the choice among all subscribers
- Pull 3653 fix sample(Observable) not requesting Long.MAX_VALUE
- Pull 3658 fix unsubscription and producer issues in sample(other)
- Pull 3662 fix doOnRequest premature requesting
- Pull 3677 negative argument check for skip's count and merge's maxConcurrent
- Pull 3681 change publish(Func1) to use a dedicated subject-like dispatcher
- Pull 3688 Fix zip() - observer array becoming visible too early and causing NPE
- Pull 3689 unified onErrorX and onExceptionResumeNext and fixed backpressure
1.1.0
Version 1.1.0 – December 2 2015 (Maven Central)
- Pull 3550 Public API changes for 1.1.0 release
Promotions to Public API
- Subscriptions.unsubscribed
- Subscribers.wrap
- 2 RxJavaErrorHandler methods
- Single + SingleSubscriber
- Exceptions.throwIfAny
- Observable.switchIfEmpty with Observable
- BackpressureDrainManager
- Observable.onBackpressureLatest
- Observable.onBackpressureDrop with action
- Observable.onBackpressureBuffer overloads
- 2 Observable.merge overloads for maxConcurrent
- TestSubscriber methods
- Observable.takeUntil with predicate
Promotions to BETA
- ConnectableObservable.autoConnect
- Stateful Subject methods on ReplaySubject, PublishSubject, BehaviorSubject, and AsyncSubject
Experimental APIs Removed
- Observable.onBackpressureBlock
- rx.observables.AbstractOnSubscribe
- Removal of stateful methods from the generic rx.subjects.Subject abstract class
1.0.17
Version 1.0.17 – December 1 2015 (Maven Central)
- Pull 3150 Window operators now support backpressure in the inner observable
- Pull 3535 Don't swallow fatal errors in OperatorZipIterable
- Pull 3528 Avoid to call next when Iterator is drained
- Pull 3436 Add action != null check in OperatorFinally
- Pull 3513 Add shorter RxJavaPlugin class lookup approach
1.0.16
- Pull 3169 Merge can now operate in horizontally unbounded mode
- Pull 3286 Implements BlockingSingle
- Pull 3433 Add Single.defer()
- Pull 3468 Fix other places that may swallow OnErrorFailedException
- Pull 3485 fix scan() not accepting a null initial value
- Pull 3488 Replace all instances of Atomic_FieldUpdater with direct Atomic_ instances
- Pull 3493 fix for zip(Obs<Obs>) backpressure problem
- Pull 3510 eager concatMap to choose safe or unsafe queue based on platform
- Pull 3512 fix SafeSubscriber documentation regarding unsubscribe
1.0.15
- Pull 3438 Better null tolerance in rx.exceptions.*Exception classes
- Pull 3455 OnErrorFailedException fix
- Pull 3448 Single delay
- Pull 3429 Removed the alias BlockingObservable#run
- Pull 3417 Add Single.doOnSuccess()
- Pull 3418 Add Single.fromCallable()
- Pull 3419 Add Single.doOnError()
- Pull 3423 Renaming Observable#x to Observable#extend
- Pull 3174 Blocking subscribe methods for convenience
- Pull 3351 Make BlockingOperatorToIterator exert backpressure.
- Pull 3357 Eager ConcatMap
- Pull 3342 Remove redundant onStart implementation in OperatorGroupBy
- Pull 3361 Safer error handling in BlockingOperatorToFuture
- Pull 3363 Remove unused private method from CachedObservable and make "state" final
- Pull 3408 DoOnEach: report both original exception and callback exception.
- Pull 3386 Changed javadoc for Observable.doOnRequest(Action1)
- Pull 3149 Scheduler shutdown capability
- Pull 3384 Fix for take() reentrancy bug.
- Pull 3356 Fix to a bunch of bugs and issues with AsyncOnSubscribe
- Pull 3362 Fix synchronization on non-final field in BufferUntilSubscriber
- Pull 3365 Make field final and remove unnecessary unboxing in OnSubscribeRedo.RetryWithPredicate
- Pull 3370 Remove unused field updater from SubjectSubscriptionManager
- Pull 3369 Lint fixes for unnecessary unboxing
- Pull 3203 Implemented the AsyncOnSubscribe
- Pull 3340 test/subjects: Use statically imported never() methods
- Pull 3154 Add Observable.fromCallable() as a companion for Observable.defer()
- Pull 3285 Added latch to async SyncOnSubscrbeTest
- Pull 3118 Implementing the SyncOnSubscribe
- Pull 3183 Refactored exception reporting of most operators.
- Pull 3214 Fix to Notification equals method.
- Pull 3171 Scan backpressure and first emission fix
- Pull 3181 MapNotification producer NPE fix
- Pull 3167 Fixed negative request due to unsubscription of a large requester
- Pull 3177 BackpressureUtils capped add/multiply methods + tests
- Pull 3155 SafeSubscriber - report onCompleted unsubscribe error to RxJavaPlugin
Artifacts: Maven Central
2.0.0 Developer Preview 0
Starting point for development on the 2.x branch.
1.0.14
- Pull 2963 Set of standard producers and updated queue implementations
- Pull 3138 Range overhead reduction.
- Pull 3137 FromIterable overhead reduction.
- Pull 3078 switchOnNext() - fix lost requests race condition
- Pull 3112 Observers package test coverage and fixes.
- Pull 3123 Remove redundant type parameter in EmptyAction
- Pull 3104 Fix SynchronizedQueue.equals
- Pull 3147 Remove unnecessary static modifier
- Pull 3144 Remove redundant cast in Exceptions
- Pull 3143 Fix for BackpressureUtils method javadoc
- Pull 3141 Improved Scheduler.Worker memory leak detection
- Pull 3082 Observable.x(ConversionFunc) to allow extensions to Observables
- Pull 3103 materialize() - add backpressure support
- Pull 3129 Fix retry with predicate ignoring backpressure.
- Pull 3121 Improve performance of NewThreadWorker, disable search for setRemoveOnCancelPolicy() on Android API < 21
- Pull 3120 No InterruptedException with synchronous BlockingObservable
- Pull 3117 Operator replay() now supports backpressure
- Pull 3116 cache() now supports backpressure
- Pull 3110 Test coverage of rx.functions utility methods.
- Pull 3101 Fix take swallowing exception if thrown by exactly the nth onNext call to it.
- Pull 3109 Unit tests and cleanup of JCTools' queues.
- Pull 3108 remove OperatorOnErrorFlatMap because unused
- Pull 3079 fix forEach javadoc
- Pull 3085 break tests as approach timeout so that don't fail on slow machines
- Pull 3086 improve ExecutorSchedulerTest.testOnBackpressureDrop
- Pull 3093 Fix request != 0 checking in the scalar paths of merge()
Artifacts: Maven Central