Stay organized with collections
Save and categorize content based on your preferences.
The IntentService class provides a straightforward structure for running
an operation on a single background thread. This allows it to handle long-running operations
without affecting your user interface's responsiveness. Also, an
IntentService isn't affected by most user interface lifecycle events, so it
continues to run in circumstances that would shut down an AsyncTask
It can't interact directly with your user interface. To put its results in the UI, you
have to send them to an Activity.
Work requests run sequentially. If an operation is running in an
IntentService, and you send it another request, the request waits until
the first operation is finished.
An operation running on an IntentService can't be interrupted.
However, in most cases an IntentService is the preferred way to perform
simple background operations.
This guide shows you how to do the following things:
To create an IntentService component for your app, define a class that
extends IntentService, and within it, define a method that
overrides onHandleIntent(). For example:
Kotlin
classRSSPullService:IntentService(RSSPullService::class.simpleName)overridefunonHandleIntent(workIntent:Intent){// Gets data from the incoming IntentvaldataString=workIntent.dataString...// Do work here, based on the contents of dataString...}}
Java
publicclassRSSPullServiceextendsIntentService{@OverrideprotectedvoidonHandleIntent(IntentworkIntent){// Gets data from the incoming IntentStringdataString=workIntent.getDataString();...// Do work here, based on the contents of dataString...}}
Notice that the other callbacks of a regular Service component, such as
onStartCommand() are automatically invoked by
IntentService. In an IntentService, you should avoid
overriding these callbacks.
An IntentService also needs an entry in your application manifest.
Provide this entry as a
<service>
element that's a child of the
<application> element:
The attribute android:name specifies the class name of the
IntentService.
Notice that the
<service>
element doesn't contain an
intent filter. The
Activity that sends work requests to the service uses an
explicit Intent, so no filter is needed. This also
means that only components in the same app or other applications with the
same user ID can access the service.
Content and code samples on this page are subject to the licenses described in the Content License. Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
Last updated 2024-01-03 UTC.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2024-01-03 UTC."],[],[],null,["# Create a background service\n\n| **Note:** `IntentService` will not work correctly when the application is in the background on the latest versions of Android. This page is left here as reference for legacy apps only. See the [guide to background processing\n| on Android](/guide/background) for recommended solutions.\n\n\nThe [IntentService](/reference/android/app/IntentService) class provides a straightforward structure for running\nan operation on a single background thread. This allows it to handle long-running operations\nwithout affecting your user interface's responsiveness. Also, an\n[IntentService](/reference/android/app/IntentService) isn't affected by most user interface lifecycle events, so it\ncontinues to run in circumstances that would shut down an [AsyncTask](/reference/android/os/AsyncTask)\n\n\nAn [IntentService](/reference/android/app/IntentService) has a few limitations:\n\n- It can't interact directly with your user interface. To put its results in the UI, you have to send them to an [Activity](/reference/android/app/Activity).\n- Work requests run sequentially. If an operation is running in an [IntentService](/reference/android/app/IntentService), and you send it another request, the request waits until the first operation is finished.\n- An operation running on an [IntentService](/reference/android/app/IntentService) can't be interrupted.\n\n\nHowever, in most cases an [IntentService](/reference/android/app/IntentService) is the preferred way to perform\nsimple background operations.\n\n\nThis guide shows you how to do the following things:\n\n- Create your own subclass of [IntentService](/reference/android/app/IntentService).\n- Create the required callback method [onHandleIntent()](/reference/android/app/IntentService#onHandleIntent(android.content.Intent)).\n- Define the [IntentService](/reference/android/app/IntentService) in your manifest file.\n\nHandle incoming intents\n-----------------------\n\n\nTo create an [IntentService](/reference/android/app/IntentService) component for your app, define a class that\nextends [IntentService](/reference/android/app/IntentService), and within it, define a method that\noverrides [onHandleIntent()](/reference/android/app/IntentService#onHandleIntent(android.content.Intent)). For example: \n\n### Kotlin\n\n```kotlin\nclass RSSPullService : IntentService(RSSPullService::class.simpleName)\n\n override fun onHandleIntent(workIntent: Intent) {\n // Gets data from the incoming Intent\n val dataString = workIntent.dataString\n ...\n // Do work here, based on the contents of dataString\n ...\n }\n}\n```\n\n### Java\n\n```java\npublic class RSSPullService extends IntentService {\n @Override\n protected void onHandleIntent(Intent workIntent) {\n // Gets data from the incoming Intent\n String dataString = workIntent.getDataString();\n ...\n // Do work here, based on the contents of dataString\n ...\n }\n}\n```\n\n\nNotice that the other callbacks of a regular [Service](/reference/android/app/Service) component, such as\n[onStartCommand()](/reference/android/app/Service#onStartCommand(android.content.Intent, int, int)) are automatically invoked by\n[IntentService](/reference/android/app/IntentService). In an [IntentService](/reference/android/app/IntentService), you should avoid\noverriding these callbacks.\n\nTo learn more about creating an `IntentService`, see [Extending the\nIntentService class](/guide/components/services#ExtendingIntentService).\n\nDefine the intent service in the manifest\n-----------------------------------------\n\n\nAn [IntentService](/reference/android/app/IntentService) also needs an entry in your application manifest.\nProvide this entry as a\n[\u003cservice\u003e](/guide/topics/manifest/service-element)\nelement that's a child of the\n[\u003capplication\u003e](/guide/topics/manifest/application-element) element: \n\n```xml\n \u003capplication\n android:icon=\"@drawable/icon\"\n android:label=\"@string/app_name\"\u003e\n ...\n \u003c!--\n Because android:exported is set to \"false\",\n the service is only available to this app.\n --\u003e\n \u003cservice\n android:name=\".RSSPullService\"\n android:exported=\"false\"/\u003e\n ...\n \u003c/application\u003e\n```\n\n\nThe attribute `android:name` specifies the class name of the\n[IntentService](/reference/android/app/IntentService).\n\n\nNotice that the\n[\u003cservice\u003e](/guide/topics/manifest/service-element)\nelement doesn't contain an\n[intent filter](/guide/components/intents-filters). The\n[Activity](/reference/android/app/Activity) that sends work requests to the service uses an\nexplicit [Intent](/reference/android/content/Intent), so no filter is needed. This also\nmeans that only components in the same app or other applications with the\nsame user ID can access the service.\n\n\nNow that you have the basic [IntentService](/reference/android/app/IntentService) class, you can send work requests\nto it with [Intent](/reference/android/content/Intent) objects. The procedure for constructing these objects\nand sending them to your [IntentService](/reference/android/app/IntentService) is described in\n[Send work requests to the background service](/training/run-background-service/send-request)."]]