Join us on the livestream at Android Dev Summit on 7-8 November 2018, starting at 10AM PDT!

Send work requests to the background service

The previous lesson showed you how to create a JobIntentService class. This lesson shows you how to trigger the JobIntentService to run an operation by enqueuing work with an Intent. This Intent can optionally contain data for the JobIntentService to process.

Create and send a work request to a JobIntentService

To create a work request and send it to a JobIntentService, create an Intent and enqueue it to be executed by calling enqueueWork(). Optionally you can add data to the intent (in the form of intent extras) for the JobIntentService to process. For more information about creating intents, read the Building an intent section in Intents and Intent Filters

The following code snippets demonstrate this process:

  1. Create a new Intent for the JobIntentService called RSSPullService.

    Kotlin

    /*
     * Creates a new Intent to start the RSSPullService
     * JobIntentService. Passes a URI in the
     * Intent's "data" field.
     */
    mServiceIntent = Intent().apply {
        putExtra("download_url", dataUrl)
    }
    

    Java

    /*
     * Creates a new Intent to start the RSSPullService
     * JobIntentService. Passes a URI in the
     * Intent's "data" field.
     */
    mServiceIntent = new Intent();
    mServiceIntent.putExtra("download_url", dataUrl));
    
  2. Call enqueueWork()

    Kotlin

    private const val RSS_JOB_ID = 1000
    RSSPullService.enqueueWork(context, RSSPullService::class.java, RSS_JOB_ID, mServiceIntent)
    

    Java

    // Starts the JobIntentService
    private static final int RSS_JOB_ID = 1000;
    RSSPullService.enqueueWork(getContext(), RSSPullService.class, RSS_JOB_ID, mServiceIntent);
    

Notice that you can send the work request from anywhere in an Activity or Fragment. For example, if you need to get user input first, you can send the request from a callback that responds to a button click or similar gesture.

Once you call enqueueWork(), the JobIntentService does the work defined in its onHandleWork() method, and then stops itself.

The next step is to report the results of the work request back to the originating Activity or Fragment. The next lesson shows you how to do this with a BroadcastReceiver.