- cú pháp:
<service android:description="string resource" android:directBootAware=["true" | "false"] android:enabled=["true" | "false"] android:exported=["true" | "false"] android:foregroundServiceType=["camera" | "connectedDevice" | "dataSync" | "health" | "location" | "mediaPlayback" | "mediaProjection" | "microphone" | "phoneCall" | "remoteMessaging" | "shortService" | "specialUse" | "systemExempted"] android:icon="drawable resource" android:isolatedProcess=["true" | "false"] android:label="string resource" android:name="string" android:permission="string" android:process="string" > ... </service>
- có trong:
<application>
- có thể chứa:
<intent-filter>
<meta-data>
- nội dung mô tả:
- Khai báo một dịch vụ, một lớp con
Service
, là một trong các thành phần của ứng dụng. Không giống như hoạt động (activity), dịch vụ (service) không có giao diện người dùng trực quan. Chúng được dùng để triển khai các thao tác lâu dài ở chế độ nền hoặc triển khai một API giao tiếp đa dạng thức có thể được gọi qua ứng dụng khác.Tất cả các dịch vụ phải được biểu thị bằng phần tử
<service>
trong tệp kê khai. Mọi hoạt động chưa khai báo sẽ không được hệ thống phát hiện và chạy.Lưu ý: Trên Android 8.0 (API cấp 26) trở lên, hệ thống sẽ giới hạn những việc ứng dụng có thể làm trong khi ứng dụng đang chạy ở chế độ nền. Để biết thêm thông tin, hãy xem hướng dẫn về giới hạn về hoạt động thực thi ở chế độ nền và giới hạn về thông tin vị trí ở chế độ nền.
- thuộc tính:
android:description
- Một chuỗi mà người dùng đọc được, dùng để mô tả dịch vụ. Nội dung mô tả được đặt ở dạng tham chiếu đến tài nguyên chuỗi để có thể được bản địa hoá như các chuỗi khác trong giao diện người dùng.
android:directBootAware
Liệu hoạt động có nhận biết khi khởi động trực tiếp hay không, tức là hoạt động có thể chạy trước khi người dùng mở khoá thiết bị không.
Lưu ý: Trong quá trình Khởi động trực tiếp, dịch vụ trong ứng dụng của bạn chỉ có thể truy cập dữ liệu được lưu trữ trong bộ nhớ được bảo vệ của thiết bị.
Giá trị mặc định là
"false"
.android:enabled
- Liệu hệ thống có thể tạo thực thể cho dịch vụ này hay không. Thuộc tính này sẽ là
"true"
nếu hệ thống có thể và là"false"
nếu hệ thống không thể. Giá trị mặc định là"true"
.Phần tử
<application>
có thuộc tínhenabled
riêng áp dụng cho tất cả thành phần của ứng dụng, bao gồm cả dịch vụ. Các thuộc tính<application>
và<service>
đều phải là"true"
vì cả hai đều được đặt theo mặc định để bật dịch vụ. Nếu giá trị là"false"
, thì dịch vụ sẽ bị tắt và không thể tạo thực thể. android:exported
- Liệu các thành phần của các ứng dụng khác có thể gọi dịch vụ hoặc tương tác với dịch vụ đó hay không. Giá trị là
"true"
nếu có thể và là"false"
nếu không thể. Khi giá trị là"false"
, chỉ các thành phần của cùng một ứng dụng hoặc các ứng dụng có cùng mã nhận dạng người dùng mới có thể bắt đầu dịch vụ hoặc liên kết với dịch vụ đó.Giá trị mặc định tuỳ thuộc vào việc dịch vụ có chứa bộ lọc ý định hay không. Nếu không có bộ lọc nào, thì bạn chỉ có thể gọi dịch vụ bằng cách chỉ định tên lớp chính xác của dịch vụ đó. Tức là dịch vụ chỉ dành cho mục đích sử dụng nội bộ trong ứng dụng, vì ứng dụng khác sẽ không biết tên lớp. Vì vậy, trong trường hợp này, giá trị mặc định là
"false"
. Mặt khác, sự hiện diện của ít nhất một bộ lọc ngụ ý rằng dịch vụ dành cho mục đích sử dụng bên ngoài, vì vậy, giá trị mặc định là"true"
.Thuộc tính này không phải là cách duy nhất để hạn chế mức độ hiển thị của một dịch vụ với các ứng dụng khác. Bạn cũng có thể sử dụng quyền để giới hạn các thực thể bên ngoài có thể tương tác với dịch vụ. Xem thuộc tính
permission
. android:foregroundServiceType
Chỉ định rằng dịch vụ là dịch vụ trên nền trước đáp ứng một trường hợp sử dụng cụ thể. Ví dụ: loại dịch vụ trên nền trước của
"location"
cho biết ứng dụng đang truy cập thông tin vị trí hiện tại của thiết bị, thường là để tiếp tục một hành động do người dùng bắt đầu liên quan đến thông tin vị trí của thiết bị.Bạn có thể chỉ định nhiều loại dịch vụ trên nền trước cho một dịch vụ cụ thể.
android:icon
- Biểu tượng đại diện cho dịch vụ. Thuộc tính này được đặt ở dạng tham chiếu đến một tài nguyên có thể vẽ và chứa định nghĩa hình ảnh.
Nếu bạn không đặt thuộc tính này, thì hệ thống sẽ sử dụng biểu tượng được chỉ định cho toàn bộ ứng dụng. Hãy xem thuộc tính
icon
của phần tử<application>
.Biểu tượng của dịch vụ, bất kể được đặt ở đây hay do phần tử
<application>
đặt, cũng là biểu tượng mặc định cho tất cả bộ lọc ý định của dịch vụ. Hãy xem thuộc tínhicon
của phần tử<intent-filter>
. android:isolatedProcess
- Nếu bạn đặt thành
"true"
, thì dịch vụ này sẽ chạy theo một quy trình đặc biệt, tách biệt với phần còn lại của hệ thống và không có quyền riêng nào. Cách liên lạc duy nhất với dịch vụ này là thông qua Service API (API Dịch vụ) có chức năng liên kết và bắt đầu. android:label
- Tên dịch vụ dễ đọc đối với người dùng.
Nếu bạn không đặt thuộc tính này, thì nhãn được đặt cho toàn bộ ứng dụng sẽ được dùng. Hãy xem thuộc tính
label
của phần tử<application>
.Nhãn của dịch vụ, bất kể được đặt ở đây hay do phần tử
<application>
đặt, cũng là nhãn mặc định cho tất cả các bộ lọc ý định của dịch vụ. Hãy xem thuộc tínhlabel
của phần tử<intent-filter>
.Nhãn được đặt ở dạng tham chiếu đến tài nguyên chuỗi để có thể được bản địa hoá như các chuỗi khác trong giao diện người dùng. Tuy nhiên, để thuận tiện trong quá trình phát triển ứng dụng, bạn cũng có thể đặt nhãn này làm chuỗi thô.
android:name
- Tên của lớp con
Service
triển khai dịch vụ. Đây là tên lớp đủ điều kiện, chẳng hạn như"com.example.project.RoomService"
. Tuy nhiên, ở dạng viết tắt, nếu ký tự đầu tiên của tên là một dấu chấm, chẳng hạn như".RoomService"
, thì hệ thống sẽ nối thêm tên gói được chỉ định trong phần tử<manifest>
.Một khi bạn đã phát hành ứng dụng thì đừng thay đổi tên này, trừ trường hợp bạn đặt
android:exported="false"
.Không có giá trị mặc định. Bạn phải chỉ định tên.
android:permission
- Tên của một quyền mà một thực thể cần có để chạy được dịch vụ hoặc liên kết với dịch vụ đó. Nếu phương thức gọi của
startService()
,bindService()
hoặcstopService()
không được cấp quyền này, thì phương thức này sẽ không hoạt động vàIntent
không được gửi đến dịch vụ.Nếu bạn không đặt thuộc tính này, thì quyền do thuộc tính
permission
của phần tử<application>
đặt sẽ áp dụng cho dịch vụ. Nếu bạn không đặt thuộc tính nào, thì dịch vụ sẽ không được bảo vệ bằng quyền.Để biết thêm thông tin về các quyền, hãy xem phần Quyền trên trang tổng quan về tệp kê khai ứng dụng và bài viết Nguyên tắc bảo mật.
android:process
- Tên của quy trình mà dịch vụ chạy. Thường thì tất cả thành phần của ứng dụng sẽ chạy trong quy trình mặc định được tạo cho ứng dụng. Quy trình này có cùng tên với gói ứng dụng. Thuộc tính
process
của phần tử<application>
có thể đặt một giá trị mặc định khác cho tất cả thành phần. Tuy nhiên, một thành phần có thể ghi đè giá trị mặc định bằng thuộc tínhprocess
riêng, cho phép bạn trải rộng ứng dụng của mình trên nhiều quy trình.Nếu tên gán cho thuộc tính này bắt đầu bằng dấu hai chấm (
:
), thì một quy trình mới (dành riêng cho ứng dụng) sẽ được tạo khi cần và dịch vụ sẽ chạy trong quy trình đó.Nếu tên quy trình bắt đầu bằng một ký tự viết thường, thì dịch vụ sẽ chạy trong một quy trình chung của tên đó, miễn hoạt động có quyền làm vậy. Điều này cho phép các thành phần trong nhiều ứng dụng dùng chung một quy trình, qua đó giúp giảm mức sử dụng tài nguyên.
- xem thêm:
<application>
<activity>
- ra mắt từ:
- API cấp 1
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: 2024-08-22 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: 2024-08-22 UTC."],[],[]]