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
WorkManager.getInstance(applicationContext)
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()
}
}
}
}
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"
)
}
- 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).
Dmitri Chernysh
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.