Ответ
- Утечки памяти из-за неправильной отписки (например, в Activity/Fragment без
CompositeDisposable). - Сложность отладки из-за цепочек операторов и асинхронности.
- Ошибки в цепочках, например, пропуск
subscribeOn/observeOn, ведущий к выполнению в неправильном потоке. - Backpressure в
Observableпри быстрой эмиссии событий (решаетсяFlowable). - Избыточность для простых задач, где
LiveDataилиCoroutinesбыли бы проще.
Пример утечки:
val disposable = Observable.interval(1, TimeUnit.SECONDS)
.subscribe { /* ... */ } // Утечка, если не отписаться в onDestroy()
Решение: Использовать CompositeDisposable и очищать в onDestroy().