A lot of the content we covered so far in this chapter did not show the optimal approaches to backpressure a source. Yes, using a Flowable and most of the standard factories and operators will automatically handle backpressure for you. However, if you are creating your own custom sources, Flowable.create() or the onBackPressureXXX() operators are somewhat compromised in how they handle backpressure requests. While quick and effective for some cases, caching emissions or simply dropping them is not always desirable. It would be better to make the source backpressured in the first place.
Thankfully, Flowable.generate() exists to help create backpressure, respecting sources at a nicely abstracted level. It will accept a Consumer<Emitter<T>> much like Flowable.create(), but it will use a lambda to specify what onNext(), onComplete()...