Slide 1

Slide 1 text

WorkManager Yoshihiro Wada a.k.a. @e10dokup 2019/1/28 at Potatotips #58

Slide 2

Slide 2 text

a.k.a. e10dokup CyberAgent Inc. Ameba

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

2018/12/23 - 1.0.0-beta01 2019/1/15 1.0.0-beta02 2018/12/12 - 1.0.0-alpha13 Breaking Change Codelabs WorkManager

Slide 5

Slide 5 text

Android Jetpack compileSdkVersion 28 API Play Services JobScheduler/AlermManager/ FirebaseJobDispatcher etc WorkManager

Slide 6

Slide 6 text

Worker WorkManager WorkRequest Worker Request WorkManager Request WorkManager WorkManager WorkRequest

Slide 7

Slide 7 text

extends Worker doWork() Worker.Result.success() / failure() Worker class MyWorker( context: Context, params: WorkerParameters ) : Worker(context, params) { override fun doWork(): Worker.Result { // Կ͔͠Βͷॲཧ return Worker.Result.success() } }

Slide 8

Slide 8 text

Worker Data build setInputData set Worker getInputData WorkRequest // Workerʹ஋Λ༩͑Δ val data = Data.Builder().putString("KEY", "VALUE").build() OneTimeWorkRequest.Builder(MyWorker::class.java) .setInputData(data) .build() // WorkerͰ஋ΛऔΓग़͢ getInputData().getString("KEY")

Slide 9

Slide 9 text

OneTimeWorkRequest Worker Request PeriodicWorkRequest Worker Request WorkRequest

Slide 10

Slide 10 text

WorkManager#enqueue WorkRequest workManager = WorkManager.getInstance() val data = Data.Builder().putString("KEY", "VALUE").build() val request = OneTimeWorkRequest.Builder(MyWorker::class.java) .setInputData(data) .build() workManager.enqueue(request)

Slide 11

Slide 11 text

WorkManager#beginWith Continuation then Work Continuation#enqueue Work // AWorker -> BWorker -> CWorkerͷॱʹ࣮ߦ͞Ε͍ͯ͘WorkContinuation val continuation = workManager.beginWith(OneTimeWorkRequest.from(AWorker::class.java)) continuation.then(OneTimeWorkRequest.from(BWorker::class.java)) continuation.then(OneTimeWorkRequest.from(CWorker::class.java)) continuation.enqueue()

Slide 12

Slide 12 text

WorkManager#beginUniqueWork ExistingWorkPolicy REPLACE - KEEP - APPEND - Work - var continuation = workManager.beginUniqueWork( "unique_work_id", ExistingWorkPolicy.REPLACE, OneTimeWorkRequest.from(AWorker::class.java) )

Slide 13

Slide 13 text

WorkRequest Constraint Work // ୺຤͕ॆిதͰ͋Δ੍໿ΛՃ͑Δ val constraints = Constraints.Builder() .setRequiresCharging(true) .build() continuation = continuation.then( OneTimeWorkRequest.Builder(AWorker::class.java) .setConstraints(constraints) .build() )

Slide 14

Slide 14 text

NetWorkType - BatteryNotLow - Charging - StorageNotLow - DeviceIdle - API23 Doze Idle Work

Slide 15

Slide 15 text

WorkRequest tag set WorkStatus uniqueId Continuation LiveData RxJava2 -> RxWorker 1.0.0-alpha12 Codelabs 2-3