Slide 1

Slide 1 text

A gentle introduction to Kotlin Coroutines Arturo Mejia Twitter: @ArturoMejia481 ArturoMejiaMarmol.com

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

Alternatives @ArturoMejia481 Threads Callbacks RX (Reactive extensions) Futures Promises

Slide 4

Slide 4 text

Threads @ArturoMejia481 Expensive, not easy to use. IOS deprecate threads. DispatchQueue

Slide 5

Slide 5 text

Callbacks @ArturoMejia481 Don't call me, I'll call you!

Slide 6

Slide 6 text

Callbacks @ArturoMejia481 Callback Hell

Slide 7

Slide 7 text

Callbacks @ArturoMejia481 Callback Hell a.k.a Tilted Christmas Tree.

Slide 8

Slide 8 text

Callbacks @ArturoMejia481 Difficult error handling.

Slide 9

Slide 9 text

Promises and Futures @ArturoMejia481

Slide 10

Slide 10 text

Reactive Extensions @ArturoMejia481 You have to change the way that you approach a problem. Operators RX Schedulers Streams

Slide 11

Slide 11 text

@ArturoMejia481 Reactive Extensions

Slide 12

Slide 12 text

@ArturoMejia481 Kotlin Coroutines Do async work the same way, exceptions, loops, etc…

Slide 13

Slide 13 text

@ArturoMejia481 Kotlin Coroutines Clear differences between suspend functions

Slide 14

Slide 14 text

@ArturoMejia481 Kotlin Coroutines Same function signature

Slide 15

Slide 15 text

Coroutines = Lightweight @ArturoMejia481 Threads Coroutines

Slide 16

Slide 16 text

@ArturoMejia481 Kotlin Coroutines

Slide 17

Slide 17 text

Goal @ArturoMejia481 Suspend Dispatchers Coroutine Builders Launch Async/await

Slide 18

Slide 18 text

Suspend @ArturoMejia481 A key word to indicate the compiler that a function can be suspended.

Slide 19

Slide 19 text

Suspend @ArturoMejia481 A suspend function should be called from a coroutine or another suspend function.

Slide 20

Slide 20 text

Suspend @ArturoMejia481 The Kotlin compiler transforms the function to a callback model and uses state machines to know when a function should be suspended or resume.

Slide 21

Slide 21 text

@ArturoMejia481 Coroutine ≈ Threads

Slide 22

Slide 22 text

Let’s get our hands dirty! @ArturoMejia481

Slide 23

Slide 23 text

Launch @ArturoMejia481 Launch is when we want to fire and forget.

Slide 24

Slide 24 text

Async @ArturoMejia481 Async is when we want to run something, then await the result.

Slide 25

Slide 25 text

Dispatchers @ArturoMejia481 DEFAULT (Computational) Uses the # cores of the CPU, not good for computations like I/O, network, disk, etc. IO designed for doing blocking I/O operations, max #64 thread, share the pool with DEFAULT. MAIN designed to operate UI objects. Indicate in which thread pool a coroutine should run

Slide 26

Slide 26 text

Interoperate @ArturoMejia481 kotlinx-coroutines-rx2: Utilities for Rx. kotlinx-coroutines-jdk8: Integration with JDK8 CompletableFuture (Android API level 24). kotlinx-coroutines-android: Designed to operate UI objects.

Slide 27

Slide 27 text

“With a great power, comes responsibility” @ArturoMejia481 Spiderman

Slide 28

Slide 28 text

Questions? @ArturoMejia481

Slide 29

Slide 29 text

Thanks! Twitter: @ArturoMejia481 ArturoMejiaMarmol.com Android Tutorials RayWenderLich.com/u/amejia481