- ไวยากรณ์:
<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" android:stopWithTask=["true" | "false"]> ... </service>
- อยู่ใน
<application>
- อาจมีข้อมูลต่อไปนี้
<intent-filter>
<meta-data>
- description:
- ประกาศบริการ ซึ่งเป็นคลาสย่อย
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: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
ไปยังบริการหากไม่ได้ตั้งค่าแอตทริบิวต์นี้ สิทธิ์ที่ตั้งค่าโดยแอตทริบิวต์
permission
ขององค์ประกอบ<application>
จะมีผลกับบริการ หากไม่ได้ตั้งค่าแอตทริบิวต์ใดเลย บริการจะไม่ได้รับการปกป้องโดยสิทธิ์ดูข้อมูลเพิ่มเติมเกี่ยวกับสิทธิ์ได้ที่ส่วนสิทธิ์ในภาพรวมของไฟล์ Manifest ของแอปและหลักเกณฑ์ด้านความปลอดภัย
android:process
- ชื่อของกระบวนการที่บริการทำงานอยู่ โดยปกติแล้ว คอมโพเนนต์ทั้งหมดของแอปพลิเคชันจะทํางานในกระบวนการเริ่มต้นที่สร้างสําหรับแอปพลิเคชัน โดยจะมีชื่อเดียวกับแพ็กเกจแอปพลิเคชัน แอตทริบิวต์ของ
<application>
องค์ประกอบสามารถตั้งค่าเริ่มต้นที่ต่างกันสำหรับคอมโพเนนต์ทั้งหมดprocess
แต่คอมโพเนนต์สามารถลบล้างค่าเริ่มต้นด้วยแอตทริบิวต์process
ของตัวเอง ซึ่งช่วยให้คุณกระจายแอปพลิเคชันไปยังหลายกระบวนการได้หากชื่อที่กำหนดให้กับแอตทริบิวต์นี้ขึ้นต้นด้วยโคลอน (
:
) ระบบจะสร้างกระบวนการใหม่ที่เป็นส่วนตัวสำหรับแอปพลิเคชันเมื่อจำเป็น และบริการจะทำงานในกระบวนการนั้นหากชื่อกระบวนการขึ้นต้นด้วยอักขระพิมพ์เล็ก บริการจะทํางานในกระบวนการส่วนกลางที่มีชื่อนั้น โดยมีเงื่อนไขว่าบริการมีสิทธิ์ทําเช่นนั้น ซึ่งจะช่วยให้คอมโพเนนต์ในแอปพลิเคชันต่างๆ ใช้กระบวนการร่วมกันได้ จึงช่วยลดการใช้ทรัพยากร
android:stopWithTask
- หากตั้งค่าเป็น
"true"
ระบบจะหยุดบริการโดยอัตโนมัติเมื่อผู้ใช้นํางานที่ฝังอยู่ในกิจกรรมที่แอปเป็นเจ้าของออก ค่าเริ่มต้นคือ"false"
- ดูข้อมูลเพิ่มเติมได้ที่
<application>
<activity>
- เปิดตัวใน
- API ระดับ 1
ตัวอย่างเนื้อหาและโค้ดในหน้าเว็บนี้ขึ้นอยู่กับใบอนุญาตที่อธิบายไว้ในใบอนุญาตการใช้เนื้อหา Java และ OpenJDK เป็นเครื่องหมายการค้าหรือเครื่องหมายการค้าจดทะเบียนของ Oracle และ/หรือบริษัทในเครือ
อัปเดตล่าสุด 2024-12-18 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"]],["อัปเดตล่าสุด 2024-12-18 UTC"],[],[]]