Slide 1

Slide 1 text

Rivu Chakraborty Efficient Async Coding in Kotlin Coroutines

Slide 2

Slide 2 text

Rivu Chakraborty BYJU’S @rivuchakraborty Efficient Async Coding in Kotlin Coroutines

Slide 3

Slide 3 text

Rivu Chakraborty BYJU’S @rivuchakraborty About Me ● Sr Software Engineer (Android) - BYJU’S ● Instructor - Caster.io ● Google Certified Associate Android Developer ● DroidJam Speaker ● Author - Reactive Programming in Kotlin ● Author - Functional Kotlin ● Author - Coroutines for Android Developers (WIP)

Slide 4

Slide 4 text

@rivuchakraborty

Slide 5

Slide 5 text

Books https://www.packtpub.com/application-d evelopment/reactive-programming-kotlin https://www.packtpub.com/application-de velopment/functional-kotlin https://leanpub.com/coroutines-for-andr oid-developers Work in Progress

Slide 6

Slide 6 text

Efficient Async Coding in Kotlin Coroutines Async => Concurrency

Slide 7

Slide 7 text

Concurrency ● Ability to execute multiple code blocks at the same time @rivuchakraborty #DevFestAhm

Slide 8

Slide 8 text

Concurrency ● Ability to execute multiple code blocks at the same time ● Not only for Android Developers @rivuchakraborty #DevFestAhm

Slide 9

Slide 9 text

Concurrency ● Ability to execute multiple code blocks at the same time ● Not only for Android Developers ● JavaScript - Promise ● JVM, Android - Threads @rivuchakraborty #DevFestAhm

Slide 10

Slide 10 text

10 Concurrency in Android ● AsyncTask ● CompletableFuture ● Runnable / Thread (Custom Threadpool) ● Rx ● Counting... @rivuchakraborty #DevFestAhm

Slide 11

Slide 11 text

11 Concurrency in Android ● AsyncTask @rivuchakraborty #DevFestAhm

Slide 12

Slide 12 text

12 Concurrency in Android ● CompletableFuture @rivuchakraborty #DevFestAhm

Slide 13

Slide 13 text

13 Concurrency in Android ● Runnable / Thread @rivuchakraborty #DevFestAhm

Slide 14

Slide 14 text

14 Concurrency in Android ● Rx @rivuchakraborty #DevFestAhm

Slide 15

Slide 15 text

15 Concurrency in Android ● Coroutines @rivuchakraborty #DevFestAhm Let’s you write non-blocking asynchronous code in your choice of Style - Sequentially, in Functional Style or whatever you prefer.

Slide 16

Slide 16 text

Coroutines 16 @rivuchakraborty #DevFestAhm Light-Weight Threads Thread 1 Thread 2 Thread 3 Coroutine 1 Coroutine 2 Coroutine 3 With Coroutines, Threads are still used (for JVM).

Slide 17

Slide 17 text

Coroutines 17 @rivuchakraborty #DevFestAhm Light-Weight Threads Thread 1 Thread 2 Thread 3 Coroutine 1 Coroutine 2 C 3 C 4 C 5 C 6 C 7 C 8 C N But a single Coroutine can run multiple coroutines.

Slide 18

Slide 18 text

Coroutines 18 @rivuchakraborty #DevFestAhm Easy to Use

Slide 19

Slide 19 text

Suspension & Continuation Builders Suspending Functions End Coroutines Components Scope & Dispatchers @rivuchakraborty #DevFestAhm

Slide 20

Slide 20 text

Coroutines 20 @rivuchakraborty #DevFestAhm Suspending vs Blocking

Slide 21

Slide 21 text

Coroutines 21 @rivuchakraborty #DevFestAhm Suspending vs Blocking

Slide 22

Slide 22 text

Coroutines 22 @rivuchakraborty #DevFestAhm Suspending vs Blocking

Slide 23

Slide 23 text

Launch a Coroutine 23 @rivuchakraborty #DevFestAhm

Slide 24

Slide 24 text

Get the Job done or cancel it, your choice. :) 24 @rivuchakraborty #DevFestAhm

Slide 25

Slide 25 text

Compute Async(hrounously) 25 @rivuchakraborty #DevFestAhm

Slide 26

Slide 26 text

Deferred 26 @rivuchakraborty #DevFestAhm ● Deferred Extends Job ● Wrapper around your data

Slide 27

Slide 27 text

Suspending Function 27 @rivuchakraborty #DevFestAhm ● suspend is a Keyword in Kotlin

Slide 28

Slide 28 text

Suspending Function 28 @rivuchakraborty #DevFestAhm ● suspend is a Keyword in Kotlin ● Compiler level restriction - can’t call suspend function outside CoroutineScope

Slide 29

Slide 29 text

Suspending Function 29 @rivuchakraborty #DevFestAhm ● suspend is a Keyword in Kotlin ● Compiler level restriction - can’t call suspend function outside CoroutineScope ● Suspends execution of current coroutine

Slide 30

Slide 30 text

Coroutine Scope 30 @rivuchakraborty #DevFestAhm ● Container of CoroutineContext

Slide 31

Slide 31 text

Coroutine Scope 31 @rivuchakraborty #DevFestAhm ● Container of CoroutineContext ● Every Coroutine Builder is an extension over CoroutineScope, and thus inherits its CoroutineContext

Slide 32

Slide 32 text

Coroutine Scope 32 @rivuchakraborty #DevFestAhm ● Container of CoroutineContext ● Every Coroutine Builder is an extension over CoroutineScope, and thus inherits its CoroutineContext ● All Coroutines must be launched within a CoroutineScope

Slide 33

Slide 33 text

Coroutine Scope 33 @rivuchakraborty #DevFestAhm

Slide 34

Slide 34 text

Dispatchers 34 @rivuchakraborty #DevFestAhm ● Determines which Thread / ThreadPool, the coroutine will run on. ● Similar to the Rx Schedulers

Slide 35

Slide 35 text

Let’s Build for Android

Slide 36

Slide 36 text

Repository 36 @rivuchakraborty #DevFestAhm

Slide 37

Slide 37 text

API (Retrofit) 37 @rivuchakraborty #DevFestAhm

Slide 38

Slide 38 text

Activity 38 @rivuchakraborty #DevFestAhm

Slide 39

Slide 39 text

Call it 39 @rivuchakraborty #DevFestAhm

Slide 40

Slide 40 text

Handle Exception (Gracefully) :) 40 @rivuchakraborty #DevFestAhm

Slide 41

Slide 41 text

Rivu Chakraborty, BYJU’S @rivuchakraborty Resources https://caster.io/courses/kotlin-c oroutines-fundamentals ● http://bit.ly/CodeLabCoroutines ● http://bit.ly/CoroutinesAndroid ● http://bit.ly/DroidCoroutines ● http://bit.ly/CoroutinesGuide

Slide 42

Slide 42 text

Rivu Chakraborty, BYJU’S @rivuchakraborty Thank you!