Slide 1

Slide 1 text

WorkManager Stable Yoshihiro Wada a.k.a. @e10dokup Otemachi.apk #2 - 2019/03/18 2019/3/20

Slide 2

Slide 2 text

Yoshihiro Wada a.k.a. @e10dokup CyberAgant Inc. / Ameba Ameba

Slide 3

Slide 3 text

WorkManager

Slide 4

Slide 4 text

Android Jetpack compileSdkVersion 28 API Play Services JobScheduler/AlermManager/FirebaseJobDispatcher FirebaseJobDispatcher 1.0.0-alpha12 FirebaseJobDispatcher deprecated etc WorkManager

Slide 5

Slide 5 text

FirebaseJobDispatcher

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

WorkManager Stable 1.0.0 Released

Slide 8

Slide 8 text

Beta RC Stable bug x Breaking API Changes 2018/12/12 1.0.0-alpha13 Codelabs API Changes

Slide 9

Slide 9 text

WorkManager

Slide 10

Slide 10 text

Worker WorkManager WorkRequest Worker Request WorkManager Request WorkManager WorkManager WorkRequest WorkManager

Slide 11

Slide 11 text

Worker doWork() WorkManager ˖ FYUFOET8PSLFSזؙٓأ׾甧ג׷ ˖ EP8PSL ⰻד䗳銲זⳢ椚׾鎸鶢ׅ׷ ˖ 䧭⸆٥㸣✪ח䘔ׄג8PSLFS3FTVMUTVDDFTT GBJMVSF ׾鵤ׅ 8PSLFS class MyWorker( context: Context, params: WorkerParameters ) : Worker(context, params) { override fun doWork(): Worker.Result { // Կ͔͠Βͷॲཧ return Worker.Result.success() } }

Slide 12

Slide 12 text

WorkRequest optional Worker OneTimeWorkRequest - WorkRequest PeriodicWorkRequest - WorkRequest WorkManager ˖ 8PSLFSח㹋遤ח䗳銲ז⦼׾♷ִ׷ ˖ %BUBؙٓأ׾CVJME׃׋׮ך׾TFU*OQVU%BUBדTFUׅ׷ ˖ 8PSLFS⩎דכHFU*OQVU%BUBד《׶⳿ׅ 8PSL3FRVFTU // Workerʹ஋Λ༩͑Δ val data = Data.Builder().putString("KEY", "VALUE").build() OneTimeWorkRequest.Builder(MyWorker::class.java) .setInputData(data) .build() // WorkerͰ஋ΛऔΓग़͢ getInputData().getString("KEY")

Slide 13

Slide 13 text

WorkManager WorkRequest enqueue WorkManager // Workerに値を与える val data = Data.Builder().putString(“KEY”, “VALUE”).build() OneTimeWorkRequest.Builder(MyWorker::class.java) .setInputData(data) .build() // Workerで値を取り出す getInputData().getString(“KEY”) ˖ 8PSL.BOBHFSFORVFVFׅ׷׌ֽ 欰䧭׃׋8PSL3FRVFTUך㹋遤 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 14

Slide 14 text

potatotips 8PSL.BOBHFS :PTIJIJSP8BEBBLB!FEPLVQ BU1PUBUPUJQT ְתׁ׵ https://bit.ly/2UF3k4Q

Slide 15

Slide 15 text

WorkManager Executor Constraints

Slide 16

Slide 16 text

DB Worker GreedyScheduler ThreadPool JobSchedulers createBestAvailableBackgroundScheduler API Level 23 JobSchedulers Google Play Services FirebaseJobDispatcher AlermManager + BroadCastReceiver Executor ref: https://speakerdeck.com/takahirom/workmanager (58P)

Slide 17

Slide 17 text

DB Worker GreedyScheduler ThreadPool JobSchedulers createBestAvailableBackgroundScheduler API Level 23 JobSchedulers AlermManager + BroadCastReceiver Executor ref: https://speakerdeck.com/takahirom/workmanager (58P)

Slide 18

Slide 18 text

Constraints WorkRequest Constraints ˖ 8PSL3FRVFTU׾⡲׷媮ꥡד$POTUSBJOU׾♷ִ׷ֿהד㹋遤儗חⵖ秈׾⸇ִ׵׸׷ 8PSLך㹋遤朐䡾׾ⵖꣲ׃׋ְ // ୺຤͕ॆిதͰ͋Δ੍໿ΛՃ͑Δ val constraints = Constraints.Builder() .setRequiresCharging(true) .build() continuation = continuation.then( OneTimeWorkRequest.Builder(AWorker::class.java) .setConstraints(constraints) .build() )

Slide 19

Slide 19 text

WorkManager Constraints NetworkType - BatterNotLow - Charging - StorageNotLow - DeviceIdle - Doze Idle API23 Constraints

Slide 20

Slide 20 text

WorkManager Constraints NetworkType - BatterNotLow - Charging - StorageNotLow - DeviceIdle - Doze Idle API23 Constraints ConstraintController Tracker Constraints

Slide 21

Slide 21 text

WorkManager Constraints NetworkType - BatterNotLow - Charging - StorageNotLow - DeviceIdle - Doze Idle API23 Constraints ConstraintController Tracker Constraints

Slide 22

Slide 22 text

Constrains Builder Charging Constraints WorkManager TaskExecuter Worker WorkerFactory Tracker ConstraintController Charging Constraint public @NonNull Builder setRequiresCharging(boolean requiresCharging) { this.mRequiresCharging = requiresCharging; return this; }

Slide 23

Slide 23 text

BatteryChargingController Room DB Charging Constraint BatteryChargingTracker ACTION_BATTERY_CHANGED intent ACTION_CHARGING / ACTION_POWER_CONNECTED Tracker Constraint Back-o Worker Charging Constraint

Slide 24

Slide 24 text

https://android.googlesource.com/platform/frameworks/support/+/androidx- master-dev/work/workmanager/src/main/java/androidx/work/impl/constraints BatteryNotLow 15% ACTION_BATTERY_OKAY/LOW NetworkType ConnectivityManager METERED CONNECTED ROAMING StorageNotLow ACTION_DEVICE_STORAGE_OK / LOW API 26 AndroidManifest BroadcastReceiver deprecated BroadcastReceiver Constraints

Slide 25

Slide 25 text

Executor Constraints Firebase JobDispatcher WorkManager migrating https://developer.android.com/topic/libraries/architecture/workmanager/ migrating-fb