Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
Lớp IntentService cung cấp một cấu trúc đơn giản để chạy
một thao tác trên một luồng nền. Điều này cho phép thư viện xử lý các hoạt động diễn ra trong thời gian dài
mà không ảnh hưởng đến khả năng phản hồi của giao diện người dùng. Ngoài ra, một
IntentService không chịu ảnh hưởng của hầu hết các sự kiện trong vòng đời của giao diện người dùng
tiếp tục chạy trong các trường hợp làm tắt AsyncTask
Nó không thể tương tác trực tiếp với giao diện người dùng của bạn. Để đưa kết quả vào giao diện người dùng, bạn
phải gửi chúng đến Activity.
Các yêu cầu công việc sẽ chạy tuần tự. Nếu một thao tác đang chạy trong một
IntentService, và bạn gửi một yêu cầu khác, yêu cầu sẽ chờ cho đến
thao tác đầu tiên đã kết thúc.
Không thể gián đoạn một hoạt động đang chạy trên IntentService.
Tuy nhiên, trong hầu hết các trường hợp, IntentService là cách ưu tiên để thực hiện
các thao tác đơn giản trong nền.
Hướng dẫn này chỉ cho bạn cách thực hiện những việc sau:
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...}}
Xin lưu ý rằng các lệnh gọi lại khác của thành phần Service thông thường, chẳng hạn như
onStartCommand() tự động được gọi bằng
IntentService. Trong IntentService, bạn nên tránh
ghi đè các lệnh gọi lại này.
IntentService cũng cần có một mục nhập trong tệp kê khai ứng dụng.
Cung cấp mục nhập này dưới dạng
<service>
là một phần tử con của
Phần tử
<application>:
Thuộc tính android:name chỉ định tên lớp của
IntentService
Lưu ý rằng
<service>
một phần tử không chứa
bộ lọc ý định. Chiến lược phát hành đĩa đơn
Khi gửi yêu cầu công việc đến dịch vụ, Activity sẽ sử dụng một
rõ ràng Intent, vì vậy không cần bộ lọc. Việc này cũng
có nghĩa là chỉ các thành phần trong cùng một ứng dụng hoặc trong ứng dụng khác có
cùng một mã nhận dạng người dùng có thể truy cập vào dịch vụ.
Nội dung và mã mẫu trên trang này phải tuân thủ các giấy phép như mô tả trong phần Giấy phép nội dung. Java và OpenJDK là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Oracle và/hoặc đơn vị liên kết của Oracle.
Cập nhật lần gần đây nhất: 2025-07-27 UTC.
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 2025-07-27 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)."]]