page.title=Sending Work Requests to the Background Service
trainingnavtop=true
@jd:body
<div id="tb-wrapper">
<div id="tb">
<h2>This lesson teaches you to</h2>
<ol>
    <li>
<a href="#CreateRequest">Create and Send a Work Request to an IntentService</a>
    </li>
</ol>
<h2>You should also read</h2>
<ul>
    <li>
        <a href="{@docRoot}guide/components/intents-filters.html">Intents and Intent Filters</a>
    </li>
</ul>
<h2>Try it out</h2>

<div class="download-box">
    <a href="{@docRoot}shareables/training/ThreadSample.zip" class="button">Download the sample</a>
    <p class="filename">ThreadSample.zip</p>
</div>

</div>
</div>
<p>
    The previous lesson showed you how to create an {@link android.app.IntentService} class. This
    lesson shows you how to trigger the {@link android.app.IntentService} to run an operation by
    sending it an {@link android.content.Intent}. This {@link android.content.Intent} can
    optionally contain data for the {@link android.app.IntentService} to process. You can
    send an {@link android.content.Intent} to an {@link android.app.IntentService} from any point
    in an {@link android.app.Activity} or {@link android.app.Fragment}
</p>
<h2 id="CreateRequest">Create and Send a Work Request to an IntentService</h2>
<p>
    To create a work request and send it to an {@link android.app.IntentService}, create an
    explicit {@link android.content.Intent}, add work request data to it, and send it to
    {@link android.app.IntentService} by calling
    {@link android.content.Context#startService startService()}.
</p>
<p>
    The next snippets demonstrate this:
</p>
<ol>
    <li>
        Create a new, explicit {@link android.content.Intent} for the
        {@link android.app.IntentService} called <code>RSSPullService</code>.
        <br>
<pre>
/*
 * Creates a new Intent to start the RSSPullService
 * IntentService. Passes a URI in the
 * Intent's "data" field.
 */
mServiceIntent = new Intent(getActivity(), RSSPullService.class);
mServiceIntent.setData(Uri.parse(dataUrl));
</pre>
    </li>
    <li>
        Call {@link android.content.Context#startService startService()}
        <br>
<pre>
// Starts the IntentService
getActivity().startService(mServiceIntent);
</pre>
</ol>
<p>
    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.
</p>
<p>
    Once you call {@link android.content.Context#startService startService()},
    the {@link android.app.IntentService} does the work defined in its
    {@link android.app.IntentService#onHandleIntent onHandleIntent()} method, and then stops itself.
</p>
<p>
    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
    {@link android.content.BroadcastReceiver}.
</p>
