Slide 1

Slide 1 text

Deep Dive in Work Manager @inyaki_mwc #mobconf18

Slide 2

Slide 2 text

#mobconf18

Slide 3

Slide 3 text

#mobconf18

Slide 4

Slide 4 text

#mobconf18

Slide 5

Slide 5 text

“ makes it easy to specify deferrable, asynchronous tasks and when they should run” #mobconf18

Slide 6

Slide 6 text

This is a real story !!! #mobconf18

Slide 7

Slide 7 text

< Android Ninja Warriors Rockstars Experts (116)

Slide 8

Slide 8 text

Hi, I’m new Android Developer, have some questions < Android Ninja Warriors Rockstars Experts (116) 4:00 PM

Slide 9

Slide 9 text

Welcome!! Sure, shoot Hi, I’m new Android Developer, have some questions < Android Ninja Warriors Rockstars Experts (116) 4:00 PM 4:00 PM

Slide 10

Slide 10 text

Welcome!! Sure, shoot Hi, I’m new Android Developer, have some questions My app has to check in the server if I have new stock prices, I don’t know.. < Android Ninja Warriors Rockstars Experts (116) 4:01 PM 4:00 PM 4:00 PM

Slide 11

Slide 11 text

Welcome!! Sure, shoot Hi, I’m new Android Developer, have some questions My app has to check in the server if I have new stock prices, I don’t know.. The first rule is don’t block the main thread < Android Ninja Warriors Rockstars Experts (116) 4:01 PM 4:02 PM 4:00 PM 4:00 PM

Slide 12

Slide 12 text

Welcome!! Sure, shoot My app has to check in the server if I have new stock prices, I don’t know.. The first rule is don’t block the main thread < Android Ninja Warriors Rockstars Experts (116) 4:02 PM 4:00 PM 4:01 PM

Slide 13

Slide 13 text

Welcome!! Sure, shoot My app has to check in the server if I have new stock prices, I don’t know.. The first rule is don’t block the main thread You can use a Thread < Android Ninja Warriors Rockstars Experts (116) 4:02 PM 4:00 PM 4:01 PM 4:03 PM

Slide 14

Slide 14 text

My app has to check in the server if I have new stock prices, I don’t know.. The first rule is don’t block the main thread You can use a Thread < Android Ninja Warriors Rockstars Experts (116) 4:02 PM 4:01 PM 4:03 PM

Slide 15

Slide 15 text

My app has to check in the server if I have new stock prices, I don’t know.. The first rule is don’t block the main thread You can use a Thread Whaaaat? Are you kidding me? Are you from the past? < Android Ninja Warriors Rockstars Experts (116) 4:02 PM 4:01 PM 4:03 PM 4:03 PM

Slide 16

Slide 16 text

The first rule is don’t block the main thread You can use a Thread Whaaaat? Are you kidding me? Are you from the past? < Android Ninja Warriors Rockstars Experts (116) 4:02 PM 4:03 PM 4:03 PM

Slide 17

Slide 17 text

The first rule is don’t block the main thread You can use a Thread Whaaaat? Are you kidding me? Are you from the past? You can use AsyncTask better than a Thread < Android Ninja Warriors Rockstars Experts (116) 4:02 PM 4:03 PM 4:03 PM 4:04 PM

Slide 18

Slide 18 text

You can use a Thread Whaaaat? Are you kidding me? Are you from the past? You can use AsyncTask better than a Thread < Android Ninja Warriors Rockstars Experts (116) 4:03 PM 4:03 PM 4:04 PM

Slide 19

Slide 19 text

You can use a Thread Whaaaat? Are you kidding me? Are you from the past? You can use AsyncTask better than a Thread 555555555 < Android Ninja Warriors Rockstars Experts (116) 4:03 PM 4:03 PM 4:04 PM 4:05 PM

Slide 20

Slide 20 text

Whaaaat? Are you kidding me? Are you from the past? You can use AsyncTask better than a Thread 555555555 < Android Ninja Warriors Rockstars Experts (116) 4:03 PM 4:04 PM 4:05 PM GUYS, are you Android Developers? You know what is a service? 4:05 PM

Slide 21

Slide 21 text

You can use AsyncTask better than a Thread 555555555 < Android Ninja Warriors Rockstars Experts (116) 4:04 PM 4:05 PM GUYS, are you Android Developers? You know what is a service? 4:05 PM

Slide 22

Slide 22 text

You can use AsyncTask better than a Thread 555555555 < Android Ninja Warriors Rockstars Experts (116) 4:04 PM 4:05 PM GUYS, are you Android Developers? You know what is a service? 4:05 PM Service? 4:06 PM

Slide 23

Slide 23 text

555555555 < Android Ninja Warriors Rockstars Experts (116) 4:05 PM GUYS, are you Android Developers? You know what is a service? 4:05 PM Service? 4:06 PM

Slide 24

Slide 24 text

555555555 < Android Ninja Warriors Rockstars Experts (116) 4:05 PM GUYS, are you Android Developers? You know what is a service? 4:05 PM Service? 4:06 PM No, Intent Service 4:07 PM

Slide 25

Slide 25 text

< Android Ninja Warriors Rockstars Experts (116) GUYS, are you Android Developers? You know what is a service? 4:05 PM Service? 4:06 PM No, Intent Service 4:07 PM

Slide 26

Slide 26 text

< Android Ninja Warriors Rockstars Experts (116) GUYS, are you Android Developers? You know what is a service? 4:05 PM Service? 4:06 PM No, Intent Service 4:07 PM What? 4:07 PM

Slide 27

Slide 27 text

< Android Ninja Warriors Rockstars Experts (116) Service? 4:06 PM No, Intent Service 4:07 PM What? 4:07 PM

Slide 28

Slide 28 text

< Android Ninja Warriors Rockstars Experts (116) Service? 4:06 PM No, Intent Service 4:07 PM What? 4:07 PM I have more than 20 years of experience and always working with ThreadPoolExecutors 4:08 PM

Slide 29

Slide 29 text

< Android Ninja Warriors Rockstars Experts (116) No, Intent Service 4:07 PM What? 4:07 PM I have more than 20 years of experience and always working with ThreadPoolExecutors 4:08 PM

Slide 30

Slide 30 text

< Android Ninja Warriors Rockstars Experts (116) No, Intent Service 4:07 PM What? 4:07 PM I have more than 20 years of experience and always working with ThreadPoolExecutors 4:08 PM Do you think the poor guy is asking for ThreadPool executors 4:09 PM

Slide 31

Slide 31 text

< Android Ninja Warriors Rockstars Experts (116) What? 4:07 PM I have more than 20 years of experience and always working with ThreadPoolExecutors 4:08 PM Do you think the poor guy is asking for ThreadPool executors 4:09 PM

Slide 32

Slide 32 text

< Android Ninja Warriors Rockstars Experts (116) What? 4:07 PM I have more than 20 years of experience and always working with ThreadPoolExecutors 4:08 PM Do you think the poor guy is asking for ThreadPool executors 4:09 PM Google is providing JobSchedulers, more easy 4:10 PM

Slide 33

Slide 33 text

< Android Ninja Warriors Rockstars Experts (116) I have more than 20 years of experience and always working with ThreadPoolExecutors 4:08 PM Do you think the poor guy is asking for ThreadPool executors 4:09 PM Google is providing JobSchedulers, more easy 4:10 PM

Slide 34

Slide 34 text

< Android Ninja Warriors Rockstars Experts (116) I have more than 20 years of experience and always working with ThreadPoolExecutors 4:08 PM Do you think the poor guy is asking for ThreadPool executors 4:09 PM Google is providing JobSchedulers, more easy 4:10 PM JobSchedulers? 4:11 PM

Slide 35

Slide 35 text

< Android Ninja Warriors Rockstars Experts (116) Do you think the poor guy is asking for ThreadPool executors 4:09 PM Google is providing JobSchedulers, more easy 4:10 PM JobSchedulers? 4:11 PM

Slide 36

Slide 36 text

< Android Ninja Warriors Rockstars Experts (116) Do you think the poor guy is asking for ThreadPool executors 4:09 PM Google is providing JobSchedulers, more easy 4:10 PM JobSchedulers? 4:11 PM RX!!! 4:12 PM

Slide 37

Slide 37 text

< Android Ninja Warriors Rockstars Experts (116) Google is providing JobSchedulers, more easy 4:10 PM JobSchedulers? 4:11 PM RX!!! 4:12 PM

Slide 38

Slide 38 text

< Android Ninja Warriors Rockstars Experts (116) Google is providing JobSchedulers, more easy 4:10 PM JobSchedulers? 4:11 PM RX!!! 4:12 PM RX!!! 4:12 PM

Slide 39

Slide 39 text

< Android Ninja Warriors Rockstars Experts (116) JobSchedulers? 4:11 PM RX!!! 4:12 PM RX!!! 4:12 PM

Slide 40

Slide 40 text

< Android Ninja Warriors Rockstars Experts (116) JobSchedulers? 4:11 PM RX!!! 4:12 PM RX!!! 4:12 PM RX!!! 4:13 PM

Slide 41

Slide 41 text

< Android Ninja Warriors Rockstars Experts (116) RX!!! 4:12 PM RX!!! 4:12 PM RX!!! 4:13 PM

Slide 42

Slide 42 text

< Android Ninja Warriors Rockstars Experts (116) RX!!! 4:12 PM RX!!! 4:12 PM RX!!! 4:13 PM Rx? 4:13 PM

Slide 43

Slide 43 text

< Android Ninja Warriors Rockstars Experts (116) RX!!! 4:12 PM RX!!! 4:13 PM Rx? 4:13 PM

Slide 44

Slide 44 text

< Android Ninja Warriors Rockstars Experts (116) RX!!! 4:12 PM RX!!! 4:13 PM Rx? 4:13 PM Don’t worry, these kids likes lot of Rx Java but then they don’t know what is a Looper and Handler 4:14 PM

Slide 45

Slide 45 text

< Android Ninja Warriors Rockstars Experts (116) RX!!! 4:13 PM Rx? 4:13 PM Don’t worry, these kids likes lot of Rx Java but then they don’t know what is a Looper and Handler 4:14 PM

Slide 46

Slide 46 text

< Android Ninja Warriors Rockstars Experts (116) RX!!! 4:13 PM Rx? 4:13 PM Don’t worry, these kids likes lot of Rx Java but then they don’t know what is a Looper and Handler 4:14 PM Ohh yes, you can still use Windows 95 and Cobol with Thread pool Executors 4:15 PM

Slide 47

Slide 47 text

< Android Ninja Warriors Rockstars Experts (116) Rx? 4:13 PM Don’t worry, these kids likes lot of Rx Java but then they don’t know what is a Looper and Handler 4:14 PM Ohh yes, you can still use Windows 95 and Cobol with Thread pool Executors 4:15 PM

Slide 48

Slide 48 text

< Android Ninja Warriors Rockstars Experts (116) Rx? 4:13 PM Don’t worry, these kids likes lot of Rx Java but then they don’t know what is a Looper and Handler 4:14 PM Ohh yes, you can still use Windows 95 and Cobol with Thread pool Executors 4:15 PM 4:16 PM

Slide 49

Slide 49 text

< Android Ninja Warriors Rockstars Experts (116) Don’t worry, these kids likes lot of Rx Java but then they don’t know what is a Looper and Handler 4:14 PM Ohh yes, you can still use Windows 95 and Cobol with Thread pool Executors 4:15 PM 4:16 PM

Slide 50

Slide 50 text

< Android Ninja Warriors Rockstars Experts (116) Don’t worry, these kids likes lot of Rx Java but then they don’t know what is a Looper and Handler 4:14 PM Ohh yes, you can still use Windows 95 and Cobol with Thread pool Executors 4:15 PM 4:16 PM 4:17 PM

Slide 51

Slide 51 text

< Android Ninja Warriors Rockstars Experts (116) Ohh yes, you can still use Windows 95 and Cobol with Thread pool Executors 4:15 PM 4:16 PM 4:17 PM

Slide 52

Slide 52 text

< Android Ninja Warriors Rockstars Experts (116) Ohh yes, you can still use Windows 95 and Cobol with Thread pool Executors 4:15 PM 4:16 PM 4:17 PM Sorry but still I don’t know how to execute a Background task 4:18 PM

Slide 53

Slide 53 text

< Android Ninja Warriors Rockstars Experts (116) 4:16 PM 4:17 PM Sorry but still I don’t know how to execute a Background task 4:18 PM

Slide 54

Slide 54 text

< Android Ninja Warriors Rockstars Experts (116) 4:16 PM 4:17 PM Sorry but still I don’t know how to execute a Background task 4:18 PM WHY YOU DON’T SEARCH IN GOOGLE??? 4:19 PM

Slide 55

Slide 55 text

< Android Ninja Warriors Rockstars Experts (116) 4:17 PM Sorry but still I don’t know how to execute a Background task 4:18 PM WHY YOU DON’T SEARCH IN GOOGLE??? 4:19 PM

Slide 56

Slide 56 text

< Android Ninja Warriors Rockstars Experts (116) 4:17 PM Sorry but still I don’t know how to execute a Background task 4:18 PM WHY YOU DON’T SEARCH IN GOOGLE??? 4:19 PM But… 4:20 PM

Slide 57

Slide 57 text

< Android Ninja Warriors Rockstars Experts (116) Sorry but still I don’t know how to execute a Background task 4:18 PM WHY YOU DON’T SEARCH IN GOOGLE??? 4:19 PM But… 4:20 PM

Slide 58

Slide 58 text

< Android Ninja Warriors Rockstars Experts (116) Sorry but still I don’t know how to execute a Background task 4:18 PM WHY YOU DON’T SEARCH IN GOOGLE??? 4:19 PM But… 4:20 PM You have been forced to leave the group 4:21PM

Slide 59

Slide 59 text

< Android Ninja Warriors Rockstars Experts (116) WHY YOU DON’T SEARCH IN GOOGLE??? 4:19 PM But… 4:20 PM You have been forced to leave the group 4:21PM

Slide 60

Slide 60 text

< Android Ninja Warriors Rockstars Experts (116) WHY YOU DON’T SEARCH IN GOOGLE??? 4:19 PM But… 4:20 PM You have been forced to leave the group 4:21PM I’m late for the party? You can use coroutines

Slide 61

Slide 61 text

Schedulers AsyncTask Handler ThreadPoolExecutor Services JobDispatchers Coroutines Threads #mobconf18

Slide 62

Slide 62 text

Schedulers AsyncTask Handler ThreadPoolExecutor Services JobDispatchers Coroutines Threads ¯\_(ツ)_/¯ #mobconf18

Slide 63

Slide 63 text

This is a real story (II) !!! #mobconf18

Slide 64

Slide 64 text

#mobconf18

Slide 65

Slide 65 text

#mobconf18

Slide 66

Slide 66 text

#mobconf18

Slide 67

Slide 67 text

Service #mobconf18

Slide 68

Slide 68 text

Service #mobconf18

Slide 69

Slide 69 text

Service #mobconf18

Slide 70

Slide 70 text

Service #mobconf18

Slide 71

Slide 71 text

Service #mobconf18

Slide 72

Slide 72 text

Job Scheduler Service #mobconf18

Slide 73

Slide 73 text

Job Scheduler Service #mobconf18

Slide 74

Slide 74 text

Job Scheduler Service #mobconf18

Slide 75

Slide 75 text

Job Scheduler Service #mobconf18

Slide 76

Slide 76 text

Job Scheduler Service Firebase Job Dispatcher #mobconf18

Slide 77

Slide 77 text

Job Scheduler Service Firebase Job Dispatcher #mobconf18

Slide 78

Slide 78 text

Job Scheduler Service Firebase Job Dispatcher #mobconf18

Slide 79

Slide 79 text

Job Scheduler Service Firebase Job Dispatcher #mobconf18 Doze Mode App Standby Background Restricted Apps Cached Wakelocks

Slide 80

Slide 80 text

Job Scheduler Service Firebase Job Dispatcher #mobconf18 Doze Mode App Standby Background Restricted Apps Cached Wakelocks

Slide 81

Slide 81 text

¯\_(ツ)_/¯ #mobconf18

Slide 82

Slide 82 text

WorkManager #mobconf18

Slide 83

Slide 83 text

WorkManager Guaranteed, constraint-aware execution Aware Background Restrictions Backwards Compatible Queryable Chainable Opportunistic #mobconf18

Slide 84

Slide 84 text

Best Effort Guaranteed Execution Exact Timing Deferrable #mobconf18

Slide 85

Slide 85 text

Best Effort Guaranteed Execution Exact Timing Deferrable Thread Pool Foreground Service Thread Pool JobScheduler JobDispatcher AlarmManager BroadcastReceivers #mobconf18

Slide 86

Slide 86 text

Best Effort Guaranteed Execution Exact Timing Deferrable Thread Pool Foreground Service Thread Pool JobScheduler JobDispatcher AlarmManager BroadcastReceivers #mobconf18

Slide 87

Slide 87 text

WORK #mobconf18

Slide 88

Slide 88 text

WORK API >= 23 ? #mobconf18

Slide 89

Slide 89 text

WORK API >= 23 ? JOBSCHEDULER Yes #mobconf18

Slide 90

Slide 90 text

WORK API >= 23 ? JOBSCHEDULER EXECUTOR Yes #mobconf18

Slide 91

Slide 91 text

WORK API >= 23 ? JOBSCHEDULER EXECUTOR Play Services? No Yes #mobconf18

Slide 92

Slide 92 text

WORK API >= 23 ? JOBSCHEDULER EXECUTOR Play Services? FIREBASE JOBDISPATCHER No Yes Yes #mobconf18

Slide 93

Slide 93 text

WORK API >= 23 ? JOBSCHEDULER EXECUTOR Play Services? FIREBASE JOBDISPATCHER ALARM MANAGER + BROADCAST No No Yes Yes #mobconf18

Slide 94

Slide 94 text

WorkManager Api #mobconf18

Slide 95

Slide 95 text

WorkManager Api implementation "android.arch.work:work-runtime:1.0.0-alpha07" implementation "android.arch.work:work-testing:1.0.0-alpha07" implementation "android.arch.work:work-runtime-ktx:1.0.0-alpha07" implementation "android.arch.work:work-firebase:1.0.0-alpha07" #mobconf18

Slide 96

Slide 96 text

WorkManager Api implementation "android.arch.work:work-runtime:1.0.0-alpha07" #mobconf18

Slide 97

Slide 97 text

WorkManager Api implementation "android.arch.work:work-runtime:1.0.0-alpha07" #mobconf18 import androidx.work.impl

Slide 98

Slide 98 text

WorkManager Api #mobconf18

Slide 99

Slide 99 text

WorkManager Api Worker WorkRequest WorkManager WorkStatus #mobconf18

Slide 100

Slide 100 text

Worker #mobconf18

Slide 101

Slide 101 text

Worker UUID Extras #mobconf18

Slide 102

Slide 102 text

Worker doWork() SUCCESS FAILURE RETRY UUID Extras #mobconf18

Slide 103

Slide 103 text

Worker doWork() SUCCESS FAILURE RETRY UUID Extras isCancelled / isStopped #mobconf18

Slide 104

Slide 104 text

WorkRequest #mobconf18

Slide 105

Slide 105 text

WorkRequest Constraints Backoff Criteria #mobconf18

Slide 106

Slide 106 text

WorkRequest Constraints Network Device Idle Battery Storage Backoff Criteria #mobconf18

Slide 107

Slide 107 text

WorkRequest Constraints Backoff Criteria OneTimeWorkRequest PeriodicWorkRequest #mobconf18

Slide 108

Slide 108 text

WorkManager #mobconf18

Slide 109

Slide 109 text

WorkManager enqueue cancel #mobconf18

Slide 110

Slide 110 text

WorkManager enqueue cancel beginWith beginUniqueWork #mobconf18

Slide 111

Slide 111 text

WorkStatus #mobconf18

Slide 112

Slide 112 text

WorkStatus UUID State Data Tags #mobconf18

Slide 113

Slide 113 text

WorkStatus UUID State Data Tags Blocked Cancelled Enqueued Failed Running Succeeded #mobconf18

Slide 114

Slide 114 text

class ProcessData : Worker() { override fun doWork(): Result { myLongTaskProcess() return Result.SUCCESS } } #mobconf18

Slide 115

Slide 115 text

class ProcessData : Worker() { override fun doWork(): Result { val result = myLongTaskProcess() val outputData = Data.Builder() .putInt(KEY, result) .build() setOutputData(outputData) return Result.SUCCESS } } #mobconf18

Slide 116

Slide 116 text

class ProcessData : Worker() { override fun doWork(): Result { val result = myLongTaskProcess() val outputData = Data.Builder() .putInt(KEY, result) .build() setOutputData(outputData) return Result.SUCCESS } } Worker UUID Extras #mobconf18

Slide 117

Slide 117 text

class ProcessData : Worker() { override fun doWork(): Result { myLongTaskProcess() return Result.SUCCESS } } #mobconf18

Slide 118

Slide 118 text

class ProcessData : Worker() { override fun doWork(): Result { myLongTaskProcess() return Result.SUCCESS } } WorkRequest #mobconf18

Slide 119

Slide 119 text

class ProcessData : Worker() { override fun doWork(): Result { myLongTaskProcess() return Result.SUCCESS } } OneTimeWorkRequest.Builder(ProcessData::class.java) WorkRequest #mobconf18

Slide 120

Slide 120 text

class ProcessData : Worker() { override fun doWork(): Result { myLongTaskProcess() return Result.SUCCESS } } OneTimeWorkRequest.Builder(ProcessData::class.java) WorkRequest PeriodicWorkRequest.Builder(ProcessData::class.java, 15, TimeUnit.MINUTES) #mobconf18

Slide 121

Slide 121 text

class ProcessData : Worker() { override fun doWork(): Result { myLongTaskProcess() return Result.SUCCESS } } OneTimeWorkRequest.Builder(ProcessData::class.java) .setConstraints(with(Constraints.Builder()) { setRequiredNetworkType(NetworkType.CONNECTED) setRequiresCharging(true) setRequiresDeviceIdle(true) build() }) #mobconf18

Slide 122

Slide 122 text

OneTimeWorkRequest.Builder(ProcessData::class.java) .setConstraints(with(Constraints.Builder()) { setRequiredNetworkType(NetworkType.CONNECTED) setRequiresCharging(true) setRequiresDeviceIdle(true) build() }) #mobconf18

Slide 123

Slide 123 text

OneTimeWorkRequest.Builder(ProcessData::class.java) .setConstraints(with(Constraints.Builder()) { setRequiredNetworkType(NetworkType.CONNECTED) setRequiresCharging(true) setRequiresDeviceIdle(true) build() }) WorkManager.getInstance().enqueue(process) #mobconf18

Slide 124

Slide 124 text

WorkManager.getInstance().enqueue(process) WorkManager.getInstance() .getStatusById(process.id) .observe(this, Observer { if (it.state.isFinished) { } }) #mobconf18

Slide 125

Slide 125 text

WorkManager.getInstance().enqueue(process) WorkManager.getInstance() .getStatusById(process.id) .observe(this, Observer { if (it.state.isFinished) { } }) #mobconf18

Slide 126

Slide 126 text

.getStatusById(process.id) #mobconf18

Slide 127

Slide 127 text

.getStatusById(process.id) @Override public @NonNull LiveData getStatusById(@NonNull UUID id) { } #mobconf18

Slide 128

Slide 128 text

.getStatusById(process.id) @Override public @NonNull LiveData getStatusById(@NonNull UUID id) { } .observe(this, Observer {}) #mobconf18

Slide 129

Slide 129 text

.getStatusById(process.id) @Override public @NonNull LiveData getStatusById(@NonNull UUID id) { } .observe(this, Observer {}) @MainThread public void observe(LifecycleOwner owner, @NonNull Observer observer) { } #mobconf18

Slide 130

Slide 130 text

Process #mobconf18

Slide 131

Slide 131 text

Process Process2 Process4 Process3 #mobconf18

Slide 132

Slide 132 text

Process Process2 Process4 Process3 #mobconf18

Slide 133

Slide 133 text

Process Process2 Process4 Process3 WorkManager.getInstance() .beginWith(process, process2) .then(process3) .then(process4) .enqueue() #mobconf18

Slide 134

Slide 134 text

Process2 Process4 Process5 Process1 Process3 #mobconf18

Slide 135

Slide 135 text

Process2 Process4 Process5 Process1 Process3 val chain1 = WorkManager.getInstance() .beginWith(process1) .then(process2) val chain2 = WorkManager.getInstance() .beginWith(process3) .then(process4) val chain3 = WorkContinuation .combine(chain1, chain2) .then(process5) chain3.enqueue() #mobconf18

Slide 136

Slide 136 text

Task Executor #mobconf18

Slide 137

Slide 137 text

Task Executor postToMainThread executeOnBackgroundThread #mobconf18

Slide 138

Slide 138 text

Task Executor postToMainThread executeOnBackgroundThread Handler(Looper.getMainLooper()) Executors.newSingleThreadExecutor #mobconf18

Slide 139

Slide 139 text

Task Executor postToMainThread executeOnBackgroundThread DefaultTaskExecutor Handler(Looper.getMainLooper()) Executors.newSingleThreadExecutor WorkManagerTaskExecutor #mobconf18

Slide 140

Slide 140 text

#mobconf18 Testing?

Slide 141

Slide 141 text

#mobconf18 Testing? private static void setupSynchronousTaskExecutor() { WorkManagerTaskExecutor.getInstance() .setTaskExecutor(new TaskExecutor() { @Override public void postToMainThread(Runnable runnable) { runnable.run(); } @Override public void executeOnBackgroundThread(Runnable runnable) { runnable.run(); } }); }

Slide 142

Slide 142 text

#mobconf18 WorkMangerTestInitHelper

Slide 143

Slide 143 text

#mobconf18 WorkMangerTestInitHelper TestWorkManagerImpl TestDriver

Slide 144

Slide 144 text

TestScheduler #mobconf18 WorkMangerTestInitHelper TestWorkManagerImpl TestDriver SynchrnousExecutor

Slide 145

Slide 145 text

WorkDatabase #mobconf18

Slide 146

Slide 146 text

WorkDatabase Room Architecture Components #mobconf18

Slide 147

Slide 147 text

WorkDatabase WorkSpec Room Architecture Components Dependency SystemIdInfo WorkName WorkTag #mobconf18

Slide 148

Slide 148 text

Upload media to a server Parse data and store it in database OK #mobconf18

Slide 149

Slide 149 text

Upload media to a server Parse data and store it in database Parse data and update contents of a view Process payment transaction Use as data store OK NOT OK #mobconf18

Slide 150

Slide 150 text

https://codelabs.developers.google.com/codelabs/android-workmanager/#0 Links & References

Slide 151

Slide 151 text

https://codelabs.developers.google.com/codelabs/android-workmanager/#0 Links & References

Slide 152

Slide 152 text

https://codelabs.developers.google.com/codelabs/android-workmanager/#0 Links & References

Slide 153

Slide 153 text

[email protected] @inyaki_mwc Thanks!!!