page.title=Running in a Background Service
page.tags="intentservice"

trainingnavtop=true
startpage=true

@jd:body

<div id="tb-wrapper">
<div id="tb">
<h2>Dependencies and prerequisites</h2>
<ul>
  <li>Android 1.6 (API Level 4) or higher</li>
</ul>
<h2>You should also read</h2>
<ul>
    <li>
<a href="{@docRoot}guide/components/services.html#ExtendingIntentService">Extending the IntentService Class</a>
    </li>
    <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>
<!-- ------------------------------------------------------------------------------------------- -->
<!-- Introduction -->
<!-- ------------------------------------------------------------------------------------------- -->
<p>
    Unless you specify otherwise, most of the operations you do in an app run in the foreground on
    a special thread called the UI thread. This can cause problems, because long-running operations
    will interfere with the responsiveness of your user interface. This annoys your users, and can
    even cause system errors. To avoid this, the Android framework offers several classes that
    help you off-load operations onto a separate thread running in the background. The most useful
    of these is {@link android.app.IntentService}.
</p>
<p>
    This class describes how to implement an {@link android.app.IntentService}, send it work
    requests, and report its results to other components.
</p>
<h2>Lessons</h2>
<dl>
    <dt>
        <b><a href="create-service.html">Creating a Background Service</a></b>
    </dt>
    <dd>
        Learn how to create an {@link android.app.IntentService}.
    </dd>
    <dt>
        <b><a href="send-request.html">Sending Work Requests to the Background Service</a></b>
    </dt>
    <dd>
        Learn how to send work requests to an {@link android.app.IntentService}.
    </dd>
    <dt>
        <b><a href="report-status.html">Reporting Work Status</a></b>
    </dt>
    <dd>
        Learn how to use an {@link android.content.Intent} and a
        {@link android.support.v4.content.LocalBroadcastManager} to communicate the status of a
        work request from an {@link android.app.IntentService} to the
        {@link android.app.Activity} that sent the request.
    </dd>
</dl>

