- ไวยากรณ์:
<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:intentMatchingFlags=["none" | "enforceIntentFilter" | "allowNullAction"] android:isolatedProcess=["true" | "false"] android:label="string resource" android:name="string" android:permission="string" android:process="string" android:stopWithTask=["true" | "false"]> ... </service>
- มีอยู่ใน
<application>- อาจมีข้อมูลต่อไปนี้
<intent-filter><meta-data><property>- คำอธิบาย:
- ประกาศบริการ ซึ่งเป็น
Serviceคลาสย่อย เป็นหนึ่งใน คอมโพเนนต์ของแอปพลิเคชัน ซึ่งต่างจากกิจกรรมตรงที่บริการไม่มี อินเทอร์เฟซผู้ใช้แบบภาพ โดยใช้เพื่อการดำเนินการในเบื้องหลังที่ใช้เวลานาน หรือ API การสื่อสารที่สมบูรณ์ซึ่งแอปพลิเคชันอื่นๆ เรียกใช้ได้บริการทั้งหมดต้องแสดงด้วยองค์ประกอบ
<service>ในไฟล์ Manifest หากไม่ได้ประกาศไว้ที่นั่น ระบบจะไม่เห็นและจะไม่เรียกใช้หมายเหตุ: ใน Android 8.0 (API ระดับ 26) ขึ้นไป ระบบจะจำกัด สิ่งที่แอปทำได้ขณะทำงานในเบื้องหลัง ดูข้อมูลเพิ่มเติมได้ในคำแนะนำที่อธิบายถึงขีดจำกัดการดำเนินการในเบื้องหลังและขีดจำกัดตำแหน่งในเบื้องหลัง
- แอตทริบิวต์
android:description- สตริงที่ผู้ใช้อ่านได้ซึ่งอธิบายบริการ คำอธิบายจะตั้งค่าเป็น การอ้างอิงไปยังทรัพยากรสตริง เพื่อให้แปลเป็นภาษาท้องถิ่นได้เหมือนสตริงอื่นๆ ในอินเทอร์เฟซผู้ใช้
android:directBootAwareไม่ว่าบริการจะรับรู้การบูตโดยตรงหรือไม่ นั่นคือ ไม่ว่าจะเรียกใช้ได้ก่อนที่ผู้ใช้จะปลดล็อกอุปกรณ์หรือไม่
หมายเหตุ: ในระหว่างการบูตโดยตรง บริการในแอปพลิเคชันจะเข้าถึงได้เฉพาะข้อมูลที่จัดเก็บไว้ในที่เก็บข้อมูลที่ป้องกันด้วยอุปกรณ์
ค่าเริ่มต้นคือ
"false"android:enabled- ระบบจะสร้างอินสแตนซ์ของบริการได้หรือไม่ โดยจะ
"true"หากทำได้ และ"false"หากทำไม่ได้ ค่าเริ่มต้น คือ"true"องค์ประกอบ
<application>มีแอตทริบิวต์enabledของตัวเองซึ่งมีผลกับคอมโพเนนต์แอปพลิเคชันทั้งหมด รวมถึงบริการด้วย แอตทริบิวต์<application>และ<service>ต้องเป็น"true"ทั้งคู่ เนื่องจากทั้ง 2 แอตทริบิวต์ เป็น"true"โดยค่าเริ่มต้นเพื่อให้เปิดใช้บริการได้ หากเป็น"false"ระบบจะปิดใช้บริการและสร้างอินสแตนซ์ไม่ได้ android:exported- คอมโพเนนต์ของแอปพลิเคชันอื่นๆ จะเรียกใช้บริการหรือโต้ตอบกับบริการได้หรือไม่
"true"หากทำได้ และ"false"หากทำไม่ได้ เมื่อค่าเป็น"false"จะมีเพียง คอมโพเนนต์ของแอปพลิเคชันเดียวกันหรือแอปพลิเคชัน ที่มีรหัสผู้ใช้เดียวกันเท่านั้นที่สามารถเริ่มบริการหรือเชื่อมโยงกับบริการได้ค่าเริ่มต้นจะขึ้นอยู่กับว่าบริการมีตัวกรอง Intent หรือไม่ การไม่มีตัวกรองใดๆ หมายความว่าคุณจะเรียกใช้ได้โดยการระบุ ชื่อคลาสที่ตรงกันเท่านั้น ซึ่งหมายความว่าบริการนี้มีไว้สำหรับการใช้งานภายในแอปพลิเคชันเท่านั้น เนื่องจากผู้อื่นไม่ทราบชื่อคลาส ดังนั้นในกรณีนี้ ค่าเริ่มต้นคือ
"false"ในทางกลับกัน การมีตัวกรองอย่างน้อย 1 รายการหมายความว่าบริการ มีไว้สำหรับการใช้งานภายนอก ดังนั้นค่าเริ่มต้นจึงเป็น"true"แอตทริบิวต์นี้ไม่ใช่เพียงวิธีเดียวในการจำกัดการเปิดเผยบริการต่อแอปพลิเคชันอื่นๆ คุณยังใช้สิทธิ์เพื่อจำกัดเอนทิตีภายนอกที่ โต้ตอบกับบริการได้ด้วย ดูแอตทริบิวต์
permission android:foregroundServiceTypeระบุว่าบริการเป็นบริการที่ทำงานอยู่เบื้องหน้าที่ตรงกับ Use Case ที่เฉพาะเจาะจง เช่น ประเภทบริการที่ทำงานอยู่เบื้องหน้าของ
"location"แสดงว่าแอปกำลังรับตำแหน่งปัจจุบันของอุปกรณ์ โดยปกติเพื่อดำเนินการต่อ จากการดำเนินการที่ผู้ใช้เริ่มต้นซึ่งเกี่ยวข้องกับตำแหน่งของอุปกรณ์คุณกำหนดประเภทบริการที่ทำงานอยู่เบื้องหน้าหลายประเภทให้กับบริการหนึ่งๆ ได้
android:iconไอคอนที่แสดงถึงบริการ แอตทริบิวต์นี้ตั้งค่าเป็น การอ้างอิงไปยังทรัพยากรที่วาดได้ซึ่งมีคำจำกัดความของรูปภาพ หากไม่ได้ตั้งค่าไว้ ระบบจะใช้ไอคอนที่ระบุสำหรับแอปพลิเคชัน โดยรวมแทน ดูแอตทริบิวต์
iconขององค์ประกอบ<application>ไอคอนของบริการ ไม่ว่าจะตั้งค่าที่นี่หรือโดยองค์ประกอบ
<application>ก็เป็นไอคอนเริ่มต้นสำหรับตัวกรอง Intent ของบริการทั้งหมดด้วย ดูแอตทริบิวต์iconขององค์ประกอบ<intent-filter>android:intentMatchingFlags-
ใช้แอตทริบิวต์นี้เพื่อปรับแต่งวิธีที่ระบบจับคู่ Intent ขาเข้ากับคอมโพเนนต์ของแอป โดยค่าเริ่มต้น ระบบจะไม่ได้ใช้กฎการจับคู่พิเศษ
ค่าที่ตั้งไว้ในแท็ก
<service>จะลบล้างค่า ที่ตั้งไว้ในแท็ก<application>ค่าต้องเป็นค่าสถานะต่อไปนี้อย่างน้อย 1 รายการ โดยคั่นด้วย "
|"ธง คำอธิบาย noneปิดใช้กฎการจับคู่พิเศษทั้งหมดสำหรับ Intent ขาเข้า เมื่อ ระบุหลายแฟล็ก ค่าที่ขัดแย้งกันจะได้รับการแก้ไขโดยให้ความสำคัญกับ แฟล็ก noneenforceIntentFilterบังคับใช้การจับคู่ที่เข้มงวดขึ้นสำหรับ Intent ขาเข้า
- Intent ที่ชัดเจนต้องตรงกับตัวกรอง Intent ของคอมโพเนนต์เป้าหมาย
- Intent ที่ไม่มีการดำเนินการจะไม่ตรงกับตัวกรอง Intent ใดๆ
allowNullActionผ่อนปรนกฎการจับคู่เพื่อให้ Intent ที่ไม่มีการดำเนินการจับคู่ได้ Flag นี้ใช้ร่วมกับ
enforceIntentFilterเพื่อให้ มีลักษณะการทำงานต่อไปนี้- Intent ที่ชัดเจนต้องตรงกับตัวกรอง Intent ของคอมโพเนนต์เป้าหมาย
- Intent ที่ไม่มีการดำเนินการจะจับคู่กับตัวกรอง Intent ใดก็ได้
ดูข้อมูลเพิ่มเติมได้ที่ส่วนIntent ที่ปลอดภัยยิ่งขึ้นในลักษณะการทำงานของ Android 16 (API ระดับ 36) ที่เปลี่ยนแปลงไป
android:isolatedProcess- หากตั้งค่าเป็น
"true"บริการนี้จะทำงานภายใต้กระบวนการพิเศษที่แยกจากส่วนอื่นๆ ของระบบและไม่มีสิทธิ์ของตัวเอง การสื่อสารกับอุปกรณ์นี้จะทำได้ผ่าน Service API เท่านั้น โดยต้องมีการเชื่อมโยงและเริ่มต้น android:label- ชื่อที่ผู้ใช้อ่านได้สำหรับบริการ
หากไม่ได้ตั้งค่าแอตทริบิวต์นี้ ระบบจะใช้ป้ายกำกับที่ตั้งไว้สำหรับแอปพลิเคชันโดยรวมแทน ดูแอตทริบิวต์
labelขององค์ประกอบ<application>ป้ายกำกับของบริการ ไม่ว่าจะตั้งค่าที่นี่หรือโดยองค์ประกอบ
<application>ก็เป็นป้ายกำกับเริ่มต้นสำหรับตัวกรอง Intent ของบริการทั้งหมดด้วย ดูแอตทริบิวต์labelขององค์ประกอบ<intent-filter>ป้ายกำกับจะตั้งค่าเป็นข้อมูลอ้างอิงไปยังทรัพยากรสตริง เพื่อให้ แปลเป็นภาษาท้องถิ่นได้เหมือนสตริงอื่นๆ ในอินเทอร์เฟซผู้ใช้ อย่างไรก็ตาม เพื่อความสะดวกในขณะที่คุณกำลังพัฒนาแอปพลิเคชัน คุณยังตั้งค่าเป็นสตริงดิบได้ด้วย
android:name- ชื่อของคลาสย่อย
Serviceที่ใช้ บริการ นี่คือชื่อคลาสที่มีคุณสมบัติครบถ้วน เช่น"com.example.project.RoomService"อย่างไรก็ตาม ในรูปแบบย่อ หากอักขระแรกของชื่อเป็นจุด เช่น".RoomService"ระบบจะต่อท้ายชื่อแพ็กเกจที่ระบุในองค์ประกอบ<manifest>เมื่อเผยแพร่แอปพลิเคชันแล้ว อย่า เปลี่ยนชื่อนี้ เว้นแต่คุณจะตั้งค่า
android:exported="false"ไม่มีค่าเริ่มต้น ต้องระบุชื่อ
android:permission- ชื่อของสิทธิ์ที่เอนทิตีต้องมีเพื่อเปิดตัวบริการหรือเชื่อมโยงกับบริการ หากผู้โทรของ
startService(),bindService()หรือstopService()ไม่ได้รับสิทธิ์นี้ วิธีการจะไม่ทำงานและระบบจะไม่ส่งออบเจ็กต์Intentไปยังบริการหากไม่ได้ตั้งค่าแอตทริบิวต์นี้ ชุดสิทธิ์ที่ตั้งค่าโดยแอตทริบิวต์
<application>ขององค์ประกอบpermissionจะมีผลกับบริการ หากไม่ได้ตั้งค่าแอตทริบิวต์ใดไว้ บริการจะไม่ได้รับการป้องกันโดยสิทธิ์ดูข้อมูลเพิ่มเติมเกี่ยวกับสิทธิ์ได้ที่ส่วนสิทธิ์ ในภาพรวมของไฟล์ Manifest ของแอปและหลักเกณฑ์ด้านความปลอดภัย
android:process- ชื่อของกระบวนการที่บริการทำงาน โดยปกติแล้ว
คอมโพเนนต์ทั้งหมดของแอปพลิเคชันจะทํางานในกระบวนการเริ่มต้นที่สร้างขึ้นสําหรับ
แอปพลิเคชัน โดยมีชื่อเหมือนกับแพ็กเกจแอปพลิเคชัน แอตทริบิวต์
processขององค์ประกอบ<application>สามารถตั้งค่า เริ่มต้นที่แตกต่างกันสำหรับคอมโพเนนต์ทั้งหมดได้ แต่คอมโพเนนต์สามารถลบล้างค่าเริ่มต้นได้ ด้วยแอตทริบิวต์processของตัวเอง ซึ่งช่วยให้คุณกระจายแอปพลิเคชัน ไปยังหลายกระบวนการได้หากชื่อที่กำหนดให้กับแอตทริบิวต์นี้ขึ้นต้นด้วยเครื่องหมายโคลอน (
:) ระบบจะสร้างกระบวนการใหม่ ซึ่งเป็นกระบวนการส่วนตัวของแอปพลิเคชันเมื่อจำเป็น และ บริการจะทำงานในกระบวนการนั้นหากชื่อกระบวนการขึ้นต้นด้วยอักขระพิมพ์เล็ก บริการจะทำงานในกระบวนการส่วนกลางที่มีชื่อนั้น โดยมีเงื่อนไขว่าบริการมีสิทธิ์ทำเช่นนั้น ซึ่งจะช่วยให้คอมโพเนนต์ในแอปพลิเคชันต่างๆ แชร์กระบวนการได้ ทำให้ลดการใช้ทรัพยากรลง
android:stopWithTask- หากตั้งค่าเป็น
"true"ระบบจะหยุดบริการโดยอัตโนมัติ เมื่อผู้ใช้นำงานที่มาจากกิจกรรมที่แอปเป็นเจ้าของออก ค่าเริ่มต้นคือ"false"
- ดูเพิ่มเติม:
<application><activity>- เปิดตัวใน
- ระดับ API 1
<service>
ตัวอย่างเนื้อหาและโค้ดในหน้าเว็บนี้ขึ้นอยู่กับใบอนุญาตที่อธิบายไว้ในใบอนุญาตการใช้เนื้อหา Java และ OpenJDK เป็นเครื่องหมายการค้าหรือเครื่องหมายการค้าจดทะเบียนของ Oracle และ/หรือบริษัทในเครือ
อัปเดตล่าสุด 2026-07-03 UTC
[[["เข้าใจง่าย","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"]],["อัปเดตล่าสุด 2026-07-03 UTC"],[],[]]