Google is committed to advancing racial equity for Black communities. See how.

Threading in WorkManager

In previous sections, we mentioned that WorkManager performs background work asynchronously on your behalf. The basic implementation addresses the demands of most apps. For more advanced use cases, such as correctly handling work being stopped, you should learn about threading and concurrency in WorkManager.

There are four different types of work primitives provided by WorkManager:

  • Worker is the simplest implementation, and the one you have seen in previous sections. WorkManager automatically runs it on a background thread (that you can override). Read more about threading in Workers in Threading in Worker.
  • CoroutineWorker is the recommended implementation for Kotlin users. CoroutineWorkers expose a suspending function for background work. By default, they run a default Dispatcher, which you can customize. Read more about threading in CoroutineWorkers in Threading in CoroutineWorker.
  • RxWorker is the recommended implementation for RxJava2 users. RxWorkers should be used if a lot of your existing asynchronous code is modelled in RxJava. As with all RxJava2 concepts, you are free to choose the threading strategy of your choice. Read more about threading in RxWorkers in Threading in RxWorker.
  • ListenableWorker is the base class for Worker, CoroutineWorker, and RxWorker. It is intended for Java developers who have to interact with callback-based asynchronous APIs such as FusedLocationProviderClient and are not using RxJava2. Read more about threading in ListenableWorkers in Threading in ListenableWorker.