API Design as an Art aWhat makes ana API? aWhat makes ana API bad? What makes an API good? ! What makes an API good? 🔨 Your lib Picasso Dagger ROOM Support library Internal libs Butter Knife RxJava Kotlin 🔨 🗡 ⛏ 🔬 🗜 🍴 🔧 🥄 🛠 AutoDispose AutoDispose • RxJava 2 utility for automatic stream disposal • Originally built in a side project ~10/2016 • Mainlined to Uber ~12/2016 • Open sourced 3/2017 Observable.just(1) .subscribe() apiRequest() .subscribe() apiRequest() // 200+ ms .subscribe() apiRequest() // 200+ ms .subscribeOn(io()) .observeOn(mainThread()) .subscribe() apiRequest() // 200+ ms .subscribeOn(io()) .observeOn(mainThread()) .subscribe() // DetailActivity.kt Memory leak val disposable = apiRequest() .subscribeOn(io()) .observeOn(mainThread()) .subscribe() // Later disposable.dispose() apiRequest() .subscribeOn(io()) .observeOn(mainThread()) .subscribe() apiRequest() .subscribeOn(io()) .observeOn(mainThread()) .to(AutoDispose.with(this).forObservable()) .subscribe() apiRequest() .subscribeOn(io()) .observeOn(mainThread()) .to(AutoDispose .with(this) // Scope .forObservable()) // Type .subscribe() apiRequest() .subscribeOn(io()) .observeOn(mainThread()) .to(AutoDispose .with(this) .forObservable()) .subscribe() apiRequest() .subscribeOn(io()) .observeOn(mainThread()) .to(AutoDispose .with(Maybe.never()) .forObservable()) .subscribe() apiRequest() .subscribeOn(io()) .observeOn(mainThread()) .to(AutoDispose .with(this) .forObservable()) .subscribe()