2019/3/18に開催されたOtemachi.apk #2の発表資料です。当日はFirebaseJobDispatcher周りについて事実とは異なる発言をしているので修正したものになります。
WorkManager StableYoshihiro Wada a.k.a. @e10dokupOtemachi.apk #2 - 2019/03/182019/3/20
View Slide
Yoshihiro Wada a.k.a. @e10dokupCyberAgant Inc. / AmebaAmeba
WorkManager
Android JetpackcompileSdkVersion 28API Play Services JobScheduler/AlermManager/FirebaseJobDispatcherFirebaseJobDispatcher 1.0.0-alpha12FirebaseJobDispatcher deprecatedetcWorkManager
FirebaseJobDispatcher
WorkManager Stable 1.0.0 Released
Beta RC Stablebug xBreaking API Changes 2018/12/12 1.0.0-alpha13Codelabs API Changes
WorkerWorkManagerWorkRequestWorker Request WorkManagerRequest WorkManagerWorkManagerWorkRequestWorkManager
WorkerdoWork()WorkManager˖ FYUFOET8PSLFSזؙٓأ甧ג˖ EP8PSL ⰻד䗳銲זⳢ椚鎸鶢ׅ˖ 䧭⸆٥㸣✪ח䘔ׄג8PSLFS3FTVMUTVDDFTT GBJMVSF 鵤ׅ8PSLFSclass MyWorker(context: Context, params: WorkerParameters) : Worker(context, params) {override fun doWork(): Worker.Result {// Կ͔͠Βͷॲཧreturn Worker.Result.success()}}
WorkRequest optional WorkerOneTimeWorkRequest - WorkRequestPeriodicWorkRequest - WorkRequestWorkManager˖ 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")
WorkManager WorkRequest enqueueWorkManager// 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)
potatotips8PSL.BOBHFS:PTIJIJSP8BEBBLB!FEPLVQBU1PUBUPUJQTְתׁhttps://bit.ly/2UF3k4Q
WorkManagerExecutor Constraints
DB WorkerGreedyScheduler ThreadPoolJobSchedulerscreateBestAvailableBackgroundSchedulerAPI Level 23 JobSchedulersGoogle Play Services FirebaseJobDispatcherAlermManager + BroadCastReceiverExecutorref: https://speakerdeck.com/takahirom/workmanager (58P)
DB WorkerGreedyScheduler ThreadPoolJobSchedulerscreateBestAvailableBackgroundSchedulerAPI Level 23 JobSchedulersAlermManager + BroadCastReceiverExecutorref: https://speakerdeck.com/takahirom/workmanager (58P)
ConstraintsWorkRequestConstraints˖ 8PSL3FRVFTU⡲媮ꥡד$POTUSBJOU♷ִֿהד㹋遤儗חⵖ秈⸇ִ8PSLך㹋遤朐䡾ⵖꣲ׃ְ// ͕ॆిதͰ͋Δ੍ΛՃ͑Δval constraints = Constraints.Builder().setRequiresCharging(true).build()continuation = continuation.then(OneTimeWorkRequest.Builder(AWorker::class.java).setConstraints(constraints).build())
WorkManager ConstraintsNetworkType -BatterNotLow -Charging -StorageNotLow -DeviceIdle - Doze Idle API23Constraints
WorkManager ConstraintsNetworkType -BatterNotLow -Charging -StorageNotLow -DeviceIdle - Doze Idle API23ConstraintsConstraintController Tracker Constraints
Constrains Builder ChargingConstraints WorkManagerTaskExecuter Worker WorkerFactoryTracker ConstraintControllerCharging Constraintpublic @NonNull Builder setRequiresCharging(boolean requiresCharging) {this.mRequiresCharging = requiresCharging;return this;}
BatteryChargingControllerRoom DB Charging ConstraintBatteryChargingTrackerACTION_BATTERY_CHANGED intent ACTION_CHARGING /ACTION_POWER_CONNECTEDTracker Constraint Back-oWorkerCharging Constraint
https://android.googlesource.com/platform/frameworks/support/+/androidx-master-dev/work/workmanager/src/main/java/androidx/work/impl/constraintsBatteryNotLow 15% ACTION_BATTERY_OKAY/LOWNetworkType ConnectivityManager METERED CONNECTEDROAMINGStorageNotLow ACTION_DEVICE_STORAGE_OK / LOWAPI 26 AndroidManifest BroadcastReceiver deprecatedBroadcastReceiverConstraints
Executor ConstraintsFirebase JobDispatcher WorkManager migratinghttps://developer.android.com/topic/libraries/architecture/workmanager/migrating-fb