با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
کلاس IntentService یک ساختار ساده برای اجرای عملیات بر روی یک رشته پسزمینه ارائه میکند. این به آن اجازه می دهد تا عملیات طولانی مدت را بدون تأثیر بر پاسخگویی رابط کاربری شما انجام دهد. همچنین، IntentService تحت تأثیر بیشتر رویدادهای چرخه عمر رابط کاربری قرار نمی گیرد، بنابراین در شرایطی که AsyncTask خاموش می کند، به کار خود ادامه می دهد.
نمی تواند به طور مستقیم با رابط کاربری شما تعامل داشته باشد. برای قرار دادن نتایج آن در UI، باید آنها را به یک Activity ارسال کنید.
درخواست های کاری به صورت متوالی اجرا می شوند. اگر عملیاتی در IntentService در حال اجرا باشد و شما درخواست دیگری برای آن ارسال کنید، درخواست تا پایان اولین عملیات منتظر می ماند.
عملیاتی که روی IntentService اجرا می شود نمی تواند قطع شود.
با این حال، در بیشتر موارد یک IntentService روش ترجیحی برای انجام عملیات پس زمینه ساده است.
این راهنما به شما نشان می دهد که چگونه کارهای زیر را انجام دهید:
برای ایجاد یک مؤلفه IntentService برای برنامه خود، کلاسی را تعریف کنید که IntentService گسترش دهد، و در داخل آن، متدی را تعریف کنید که روی onHandleIntent() را لغو کند. به عنوان مثال:
کاتلین
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...}}
جاوا
publicclassRSSPullServiceextendsIntentService{@OverrideprotectedvoidonHandleIntent(IntentworkIntent){// Gets data from the incoming IntentStringdataString=workIntent.getDataString();...// Do work here, based on the contents of dataString...}}
توجه داشته باشید که سایر فراخوانهای یک جزء Service معمولی، مانند onStartCommand() به طور خودکار توسط IntentService فراخوانی میشوند. در IntentService ، باید از نادیده گرفتن این تماسها اجتناب کنید.
ویژگی android:name نام کلاس IntentService را مشخص می کند.
توجه داشته باشید که عنصر <service> حاوی فیلتر قصد نیست. Activity که درخواست های کاری را به سرویس ارسال می کند از یک Intent صریح استفاده می کند، بنابراین نیازی به فیلتر نیست. این همچنین به این معنی است که فقط اجزای موجود در همان برنامه یا سایر برنامهها با شناسه کاربری یکسان میتوانند به این سرویس دسترسی داشته باشند.
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","easyToUnderstand","thumb-up"],["مشکلم را برطرف کرد","solvedMyProblem","thumb-up"],["غیره","otherUp","thumb-up"]],[["اطلاعاتی که نیاز دارم وجود ندارد","missingTheInformationINeed","thumb-down"],["بیشازحد پیچیده/ مراحل بسیار زیاد","tooComplicatedTooManySteps","thumb-down"],["قدیمی","outOfDate","thumb-down"],["مشکل ترجمه","translationIssue","thumb-down"],["مشکل کد / نمونهها","samplesCodeIssue","thumb-down"],["غیره","otherDown","thumb-down"]],["تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی."],[],[],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)."]]