Skip to content

mobiledevpro/Android-WorkManager-Demo

Repository files navigation

Android | Jetpack WorkManager | Demo

Kotlin Version Gradle API License

CodeFactor Quality Gate Status

GitHub last commit

WorkManager is the recommended solution for persistent work. Work is persistent when it remains scheduled through app restarts and system reboots. Because most background processing is best accomplished through persistent work, WorkManager is the primary recommended API for background processing. Read more in official docs

3 Steps to run periodic tasks in the background even the app is closed:

#1 Init Jetpack WorkManager

WorkManager.getInstance(applicationContext)

#2 Setup Worker

class PriceAlerterWorker(
    appContext: Context,
    params: WorkerParameters,
    private val interactor: PriceAlerterInteractor
) : RxWorker(appContext, params) {

    override fun createWork(): Single<Result> =
        interactor
            .createDemoAlert()
            .map { result ->
                when (result) {
                    is RxResult.Success -> {
                        //Do something on success
                        Result.success()
                    }
                    is RxResult.Failure -> {
                        //Do something on fail
                        Result.retry()
                    }
                }
            }
}

#3 Build request and run work

        PeriodicWorkRequestBuilder<PriceAlerterWorker>(15, TimeUnit.MINUTES)
            .setConstraints(
                Constraints.Builder()
                    .setRequiresBatteryNotLow(true)
                    .build()
            )
            .addTag(WORKER_PRICE_ALERT_TAG)
            .build()
            .let { request ->
                workManager.runUniqueWork(
                    request,
                    "${WORKER_PRICE_ALERT_TAG}_periodic"
                )
            }

More about WorkManager:

Notes:

  • The minimal interval for periodic tasks is 15 minutes, even if you set 1 min.
  • Retry with Backoff policy supports the minimum 10 sec and the maximum 5 hours interval (30 sec by default).

Follow:

Dmitri Chernysh

Youtube Instagram Twitter Linkedin

License:

Copyright 2021 Dmitriy Chernysh

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.