Skip to content
DeveloperMemos

Passing data to a WorkManager Worker with setInputData

Android, WorkManager, Background Processing1 min read

One of the key features of WorkManager, a powerful library for background processing in Android, is its ability to handle complex tasks efficiently. To make this possible, it's often necessary to pass data to the workers executing these tasks. Thankfully, WorkManager provides a convenient method called setInputData() that allows you to pass data to your workers effortlessly.

Understanding WorkManager Workers

Before diving into passing data, let's quickly understand the concept of WorkManager workers. Workers are individual units of work that you submit to WorkManager for execution. Each worker performs a specific task in the background, such as uploading files or syncing data.

Workers are created by extending the Worker class and overriding the doWork() method, where you define the actual work that needs to be done. These workers can also take input data, enabling them to perform tasks based on the provided information.

Using setInputData() to Pass Data

To pass data to a WorkManager worker, you need to use the setInputData() method. This method allows you to create a Data object, which is essentially a key-value mapping of various data types. You can then set this Data object as the input data for your worker.

Here's an example that demonstrates the usage of setInputData():

1val dataBuilder = Data.Builder()
2dataBuilder.putString("key", "value")
3dataBuilder.putInt("count", 10)
4val inputData = dataBuilder.build()
5
6val workRequest = OneTimeWorkRequestBuilder<MyWorker>()
7 .setInputData(inputData)
8 .build()
9
10WorkManager.getInstance(context).enqueue(workRequest)

In this example, we create a Data.Builder object and use it to add key-value pairs to the input data. In this case, we set a string value with the key "key" and an integer value with the key "count". Finally, we build the Data object using dataBuilder.build().

We then create a OneTimeWorkRequest using OneTimeWorkRequestBuilder and set the previously created input data using setInputData(). Finally, we enqueue the work request with WorkManager.getInstance(context).enqueue(workRequest).

Accessing Input Data in the Worker

Once you have passed the input data to the worker, you can access it within the doWork() method of the worker class. The input data is available through the getInputData() method.

Here's an example of how you can access the input data within a worker:

1class MyWorker(context: Context, params: WorkerParameters) : Worker(context, params) {
2 override fun doWork(): Result {
3 val inputData = inputData
4
5 val value = inputData.getString("key")
6 val count = inputData.getInt("count", 0)
7
8 // Perform your background task using the received data
9
10 return Result.success()
11 }
12}

In this example, we retrieve the input data using inputData, and then obtain the values using the corresponding keys. In this case, we retrieve the string value using getString("key") and the integer value using getInt("count", 0).

After accessing the required data, you can perform your desired background task based on the input provided.


Passing data to a WorkManager worker is made easy with the setInputData() method. By utilizing this feature, you can provide necessary information to your workers and perform complex background tasks efficiently.