- 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" | "location" | "mediaPlayback" | "mediaProjection" | "microphone" | "phoneCall"] 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>
- mô tả:
- Khai báo một dịch vụ (một lớp con
Service
) là một 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ả dịch vụ phải được thể hiện bằng phần tử
<service>
trong tệp kê khai. Hệ thống sẽ không nhìn thấy và không bao giờ chạy các dịch vụ chưa được khai báo.Lưu ý: Trên Android 8.0 (API cấp 26) trở lên, hệ thống sẽ đặt giới hạn về những dịch vụ mà ứng dụng có thể thực hiện trong khi đ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
- Chuỗi mô tả dịch vụ cho người dùng. Bạn nên đặt nhãn này làm mã tham chiếu đến một tài nguyên chuỗi để nhãn có thể được bản địa hoá như các chuỗi khác trong giao diện người dùng.
android:directBootAware
Dịch vụ có nhận biết quá trình khởi động trực tiếp (direct-boot aware) hay không; tức là dịch vụ có thể chạy trước khi người dùng mở khoá thiết bị hay 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
- Hệ thống có thể tạo thực thể cho dịch vụ hay không – "
true
" nếu có thể và "false
" nếu 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>
phải là "true
" (vì cả hai đều được đặt theo mặc định) để bật dịch vụ. Nếu một trong hai thuộc tính là "false
", thì dịch vụ đó sẽ bị tắt và không tạo được thực thể. android:exported
- Các thành phần của các ứng dụng khác có thể gọi dịch vụ hay tương tác với dịch vụ hay không – "
true
" nếu có thể và "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, nếu có ít nhất một bộ lọc thì tức là dịch vụ sẽ dành cho mục đích sử dụng bên ngoài, nên giá trị là "true
".Thuộc tính này không phải là cách duy nhất để giới hạn mức độ tiếp xúc 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 (foreground service) đá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ụ. Bạn phải đặt thuộc tính này làm mã tham chiếu đến một tài nguyên có thể vẽ và chứa phần định nghĩa về 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 đã chỉ định cho toàn bộ ứng dụng (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ụ (xem thuộc tínhicon
của phần tử<intent-filter>
). android:isolatedProcess
- Nếu bạn đặt thành đúng (true), thì dịch vụ sẽ chạy theo một quy trình đặc biệt độc lập 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 (liên kêt và bắt đầu).
android:label
- Tên của dịch vụ mà người dùng có thể thấy.
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 sử dụng (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ả bộ lọc ý định của dịch vụ (xem thuộc tínhlabel
của phần tử<intent-filter>
).Bạn nên đặt nhãn này làm mã tham chiếu đến một tài nguyên chuỗi để nhãn 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 cho bạn trong quá trình phát triển ứng dụng, nhãn này cũng có thể được đặt làm một chuỗi thô (raw string).
android:name
- Tên của lớp con
Service
triển khai dịch vụ. Đây phải là tên lớp đủ điều kiện (ví dụ: "com.example.project.RoomService
"). Tuy nhiên, do là tên viết tắt, nếu ký tự đầu tiên của tên lớp là dấu chấm (ví dụ: ".RoomService
"), thì tên này được thêm vào tên gói được chỉ định trong phần tử<manifest>
.Sau khi phát hành ứng dụng, bạn không nên 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()
hoặcbindService()
chưa được cấp quyền này, thì phương thức này sẽ không hoạt động và đối tượng ý định sẽ không được gửi đến dịch vụ.stopService()
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 mục Quyền trong phần giới thiệu cũng như xem tài liệu riêng về Bảo mật và quyền.
android:process
- Tên của quá trình mà dịch vụ sẽ 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ỗi thành phần có thể ghi đè chế độ mặc định bằng thuộc tínhprocess
riêng, cho phép bạn trải ứng dụng 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 là có quyền làm như vậy. Điều này cho phép các thành phần trong nhiều ứng dụng chia sẻ một quy trình, 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: 2022-09-13 UTC.
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"Thiếu thông tin tôi cần"
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"Quá phức tạp/quá nhiều bước"
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"Đã lỗi thời"
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"Vấn đề về bản dịch"
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"Vấn đề về mẫu/mã"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"Khác"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"Dễ hiểu"
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"Giúp tôi giải quyết được vấn đề"
},{
"type": "thumb-up",
"id": "otherUp",
"label":"Khác"
}]