Android 10 ได้เปิดตัวแอตทริบิวต์ android:foregroundServiceType
ภายในองค์ประกอบ <service>
เพื่อช่วยให้นักพัฒนาแอปมีความตั้งใจมากขึ้นในการกำหนดบริการที่ทำงานอยู่เบื้องหน้าที่แสดงต่อผู้ใช้
หากแอปกำหนดเป้าหมายเป็น Android 14 จะต้องระบุประเภทบริการที่ทำงานอยู่เบื้องหน้าที่เหมาะสม คุณสามารถรวมหลายประเภทเข้าด้วยกันได้เช่นเดียวกับใน Android เวอร์ชันก่อนหน้า รายการนี้แสดงประเภทบริการที่ทำงานอยู่เบื้องหน้าที่คุณเลือกได้
camera
connectedDevice
dataSync
health
location
mediaPlayback
mediaProjection
microphone
phoneCall
remoteMessaging
shortService
specialUse
systemExempted
หากกรณีการใช้งานในแอปของคุณไม่เกี่ยวข้องกับประเภทใดเลย เราขอแนะนําอย่างยิ่งให้คุณย้ายข้อมูลตรรกะไปใช้ WorkManager หรือการโอนข้อมูลที่เริ่มต้นโดยผู้ใช้
health, remoteMessaging, shortService, specialUse
และ systemExempted
เป็นประเภทใหม่ใน Android 14
ข้อมูลโค้ดต่อไปนี้แสดงตัวอย่างการประกาศประเภทบริการที่ทำงานอยู่เบื้องหน้าในไฟล์ Manifest
<manifest ...>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
<application ...>
<service
android:name=".MyMediaPlaybackService"
android:foregroundServiceType="mediaPlayback"
android:exported="false">
</service>
</application>
</manifest>
หากแอปที่กำหนดเป้าหมายเป็น Android 14 ไม่ได้กำหนดประเภทสำหรับบริการที่ระบุในไฟล์ Manifest ระบบจะเพิ่ม MissingForegroundServiceTypeException
เมื่อเรียกใช้ startForeground()
สำหรับบริการนั้น
声明新权限来使用前台服务类型
หากแอปที่กำหนดเป้าหมายเป็น Android 14 ใช้บริการที่ทำงานอยู่เบื้องหน้า แอปจะต้องประกาศสิทธิ์ที่เฉพาะเจาะจงตามประเภทบริการที่ทำงานอยู่เบื้องหน้าซึ่ง Android 14 เปิดตัว สิทธิ์เหล่านี้จะปรากฏในส่วนที่มีป้ายกำกับว่า "สิทธิ์ที่คุณต้องประกาศในไฟล์ Manifest" ในส่วนกรณีการใช้งานที่ต้องการและการบังคับใช้สำหรับบริการที่ทำงานอยู่เบื้องหน้าแต่ละประเภทในหน้านี้
สิทธิ์ทั้งหมดถือเป็นสิทธิ์ทั่วไปและได้รับสิทธิ์โดยค่าเริ่มต้น ผู้ใช้เพิกถอนสิทธิ์เหล่านี้ไม่ได้
在运行时包含前台服务类型
แนวทางปฏิบัติแนะนำสำหรับแอปพลิเคชันที่เริ่มบริการที่ทำงานอยู่เบื้องหน้าคือให้ใช้ startForeground()
เวอร์ชัน ServiceCompat
(มีอยู่ใน androidx-core 1.12 ขึ้นไป) ซึ่งคุณส่งค่าจำนวนเต็มแบบ 2 ฐานของประเภทบริการที่ทำงานอยู่เบื้องหน้า คุณเลือกที่จะส่งค่าประเภทต่างๆ ได้อย่างน้อย 1 ค่า
โดยทั่วไปคุณควรประกาศเฉพาะประเภทที่จำเป็นสำหรับ Use Case ที่เฉพาะเจาะจงเท่านั้น ซึ่งจะช่วยให้คุณทำตามความคาดหวังของระบบสำหรับบริการที่ทำงานอยู่เบื้องหน้าแต่ละประเภทได้ง่ายขึ้น ในกรณีที่บริการที่ทำงานอยู่เบื้องหน้าเริ่มต้นด้วยหลายประเภท บริการดังกล่าวต้องเป็นไปตามข้อกำหนดในการบังคับใช้แพลตฟอร์มทั้งหมด
ServiceCompat.startForeground(0, notification, FOREGROUND_SERVICE_TYPE_LOCATION)
หากไม่ได้ระบุประเภทบริการที่ทำงานอยู่เบื้องหน้าในการเรียกใช้ ระบบจะใช้ค่าเริ่มต้นของประเภทนั้นซึ่งกำหนดไว้ในไฟล์ Manifest หากคุณไม่ได้ระบุประเภทบริการในไฟล์ Manifest ระบบจะแสดงMissingForegroundServiceTypeException
หากบริการที่ทำงานอยู่เบื้องหน้าต้องการสิทธิ์ใหม่หลังจากเปิดใช้งาน คุณควรเรียกใช้ startForeground()
อีกครั้งและเพิ่มประเภทบริการใหม่ ตัวอย่างเช่น สมมติว่าแอปฟิตเนสเรียกใช้บริการติดตามการวิ่งที่ต้องใช้ข้อมูล location
เสมอ แต่อาจจำเป็นต้องหรือไม่ต้องมีสิทธิ์ media
คุณจะต้องประกาศทั้ง location
และ mediaPlayback
ในไฟล์ Manifest หากผู้ใช้เริ่มการวิ่งและต้องการติดตามตำแหน่งเท่านั้น แอปของคุณควรเรียกใช้ startForeground()
และส่งเฉพาะประเภทบริการ location
จากนั้นหากผู้ใช้ต้องการเริ่มเล่นเสียง ให้เรียกใช้ startForeground()
อีกครั้งและส่ง location|mediaPlayback
系统运行时检查
ระบบจะตรวจสอบการใช้ประเภทบริการที่ทำงานอยู่เบื้องหน้าอย่างเหมาะสม และยืนยันว่าแอปได้ขอสิทธิ์รันไทม์ที่เหมาะสมหรือใช้ API ที่จำเป็น
เช่น ระบบคาดหวังว่าแอปที่ใช้บริการที่ทำงานอยู่เบื้องหน้าประเภท FOREGROUND_SERVICE_TYPE_LOCATION
จะขอ ACCESS_COARSE_LOCATION
หรือ ACCESS_FINE_LOCATION
ซึ่งหมายความว่าแอปต้องปฏิบัติตามลำดับการดำเนินการที่เฉพาะเจาะจงมากเมื่อขอสิทธิ์จากผู้ใช้และเริ่มบริการที่ทำงานอยู่เบื้องหน้า คุณต้องขอสิทธิ์และได้รับสิทธิ์ก่อนที่แอปจะพยายามโทรหา startForeground()
แอปที่ขอสิทธิ์ที่เหมาะสมหลังจากที่เริ่มบริการที่ทำงานอยู่เบื้องหน้าแล้วต้องเปลี่ยนลำดับการดำเนินการนี้และขอสิทธิ์ก่อนเริ่มบริการที่ทำงานอยู่เบื้องหน้า
ข้อกำหนดเฉพาะของการบังคับใช้แพลตฟอร์มจะปรากฏในส่วนที่มีป้ายกำกับว่า "ข้อกำหนดรันไทม์" ในส่วนกรณีการใช้งานที่ต้องการและการบังคับใช้สำหรับบริการที่ทำงานอยู่เบื้องหน้าแต่ละประเภทในหน้านี้
每种前台服务类型的预期用例和强制执行
หากต้องการใช้บริการที่ทำงานอยู่เบื้องหน้าประเภทหนึ่งๆ คุณต้องประกาศสิทธิ์ที่เฉพาะเจาะจงในไฟล์ Manifest, ต้องปฏิบัติตามข้อกำหนดรันไทม์ที่เฉพาะเจาะจง และแอปต้องเป็นไปตามชุด Use Case ที่ต้องการสำหรับประเภทนั้น ส่วนต่อไปนี้อธิบายสิทธิ์ที่คุณต้องประกาศ ข้อกําหนดเบื้องต้นรันไทม์ และกรณีการใช้งานที่ต้องการสําหรับแต่ละประเภท
相机
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ Manifest ในส่วน
android:foregroundServiceType
camera
- สิทธิ์ในการประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_CAMERA
- ค่าคงที่ที่จะส่งไปยัง
startForeground()
FOREGROUND_SERVICE_TYPE_CAMERA
- ข้อกําหนดเบื้องต้นของรันไทม์
ขอและได้รับสิทธิ์รันไทม์
CAMERA
หมายเหตุ: สิทธิ์รันไทม์
CAMERA
อยู่ภายใต้ข้อจำกัดขณะใช้งาน ด้วยเหตุนี้ คุณจึงสร้างcamera
บริการที่ทำงานอยู่เบื้องหน้าไม่ได้ขณะที่แอปอยู่ในเบื้องหลัง ยกเว้นบางกรณี ดูข้อมูลเพิ่มเติมได้ที่ข้อจำกัดในการเริ่มบริการที่ทำงานอยู่เบื้องหน้าซึ่งต้องใช้สิทธิ์ขณะใช้งาน- คำอธิบาย
การเข้าถึงกล้องจากเบื้องหลังอย่างต่อเนื่อง เช่น แอปวิดีโอแชทที่อนุญาตให้ทำงานหลายอย่างพร้อมกันได้
连接的设备
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ Manifest ในส่วน
android:foregroundServiceType
connectedDevice
- สิทธิ์ในการประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_CONNECTED_DEVICE
- ค่าคงที่ที่จะส่งไปยัง
startForeground()
FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE
- ข้อกําหนดเบื้องต้นของรันไทม์
เงื่อนไขต่อไปนี้อย่างน้อย 1 ข้อจะต้องเป็นจริง
ประกาศสิทธิ์ต่อไปนี้อย่างน้อย 1 รายการในไฟล์ Manifest
ขอและได้รับสิทธิ์รันไทม์ต่อไปนี้อย่างน้อย 1 สิทธิ์
- คำอธิบาย
การโต้ตอบกับอุปกรณ์ภายนอกที่ต้องใช้การเชื่อมต่อบลูทูธ, NFC, IR, USB หรือเครือข่าย
- ทางเลือก
หากแอปของคุณต้องโอนข้อมูลไปยังอุปกรณ์ภายนอกอย่างต่อเนื่อง ให้ลองใช้เครื่องมือจัดการอุปกรณ์ที่ใช้ร่วมกันแทน ใช้ companion device presence API เพื่อช่วยให้คุณแอปทำงานต่อไปได้ขณะที่อุปกรณ์ที่ใช้ร่วมกันอยู่ในระยะสัญญาณ
หากแอปของคุณต้องสแกนหาอุปกรณ์บลูทูธ ให้ลองใช้ Bluetooth Scan API แทน
数据同步
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ Manifest ในส่วน
android:foregroundServiceType
dataSync
- สิทธิ์ในการประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_DATA_SYNC
- ค่าคงที่ที่จะส่งไปยัง
startForeground()
FOREGROUND_SERVICE_TYPE_DATA_SYNC
- ข้อกําหนดเบื้องต้นของรันไทม์
- ไม่มี
- คำอธิบาย
การดำเนินการโอนข้อมูล เช่น การดำเนินการต่อไปนี้
- การอัปโหลดหรือดาวน์โหลดข้อมูล
- การดำเนินการสำรองและกู้คืนข้อมูล
- การดำเนินการนำเข้าหรือส่งออก
- ดึงข้อมูล
- การประมวลผลไฟล์ในเครื่อง
- โอนข้อมูลระหว่างอุปกรณ์กับระบบคลาวด์ผ่านเครือข่าย
- ทางเลือก
ดูข้อมูลโดยละเอียดได้ที่ทางเลือกแทนบริการที่ทำงานอยู่เบื้องหน้าสำหรับการซิงค์ข้อมูล
健康
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ Manifest ในส่วน
android:foregroundServiceType
health
- สิทธิ์ในการประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_HEALTH
- ค่าคงที่ที่จะส่งไปยัง
startForeground()
FOREGROUND_SERVICE_TYPE_HEALTH
- ข้อกําหนดเบื้องต้นของรันไทม์
เงื่อนไขต่อไปนี้อย่างน้อย 1 ข้อจะต้องเป็นจริง
ประกาศสิทธิ์
HIGH_SAMPLING_RATE_SENSORS
ในไฟล์ Manifestขอและได้รับสิทธิ์รันไทม์ต่อไปนี้อย่างน้อย 1 สิทธิ์
หมายเหตุ: สิทธิ์รันไทม์
BODY_SENSORS
อยู่ภายใต้ข้อจำกัดขณะใช้งาน ด้วยเหตุนี้ คุณจึงสร้างhealth
บริการที่ทำงานอยู่เบื้องหน้าซึ่งใช้เซ็นเซอร์ร่างกายขณะที่แอปทำงานอยู่เบื้องหลังไม่ได้ ยกเว้นบางกรณี ดูข้อมูลเพิ่มเติมได้ที่ข้อจำกัดในการเริ่มบริการที่ทำงานอยู่เบื้องหน้าซึ่งต้องใช้สิทธิ์ขณะใช้งาน- คำอธิบาย
กรณีการใช้งานที่ทำงานต่อเนื่องเพื่อรองรับแอปในหมวดหมู่ฟิตเนส เช่น อุปกรณ์ติดตามการออกกำลังกาย
位置
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ Manifest ในส่วน
android:foregroundServiceType
location
- สิทธิ์ในการประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_LOCATION
- ค่าคงที่ที่จะส่งไปยัง
startForeground()
FOREGROUND_SERVICE_TYPE_LOCATION
- ข้อกําหนดเบื้องต้นของรันไทม์
ผู้ใช้ต้องเปิดใช้บริการตำแหน่งและแอปต้องได้รับสิทธิ์รันไทม์อย่างน้อย 1 รายการต่อไปนี้
หมายเหตุ: หากต้องการตรวจสอบว่าผู้ใช้เปิดใช้บริการหาตำแหน่ง รวมถึงให้สิทธิ์เข้าถึงรันไทม์แล้ว ให้ใช้
PermissionChecker#checkSelfPermission()
หมายเหตุ: สิทธิ์รันไทม์ของตำแหน่งอยู่ภายใต้ข้อจำกัดขณะใช้งาน ด้วยเหตุนี้ คุณจึงสร้าง
location
บริการที่ทำงานอยู่เบื้องหน้าไม่ได้ขณะที่แอปอยู่ในเบื้องหลัง เว้นแต่จะได้รับสิทธิ์รันไทม์ACCESS_BACKGROUND_LOCATION
ดูข้อมูลเพิ่มเติมได้ที่ข้อจำกัดในการเริ่มบริการที่ทำงานอยู่เบื้องหน้าซึ่งต้องใช้สิทธิ์ขณะใช้งาน- คำอธิบาย
กรณีการใช้งานที่ทำงานต่อเนื่องซึ่งต้องใช้สิทธิ์เข้าถึงตำแหน่ง เช่น การนำทางและการแชร์ตำแหน่ง
- ทางเลือก
หากต้องการให้แอปทริกเกอร์เมื่อผู้ใช้ไปถึงสถานที่ที่เฉพาะเจาะจง ให้ลองใช้ Geofence API แทน
媒体
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ Manifest ในส่วน
android:foregroundServiceType
mediaPlayback
- สิทธิ์ในการประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_MEDIA_PLAYBACK
- ค่าคงที่ที่จะส่งไปยัง
startForeground()
FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
- ข้อกําหนดเบื้องต้นของรันไทม์
- ไม่มี
- คำอธิบาย
- เล่นเสียงหรือวิดีโออย่างต่อเนื่องจากเบื้องหลัง รองรับฟังก์ชันการบันทึกวิดีโอดิจิทัล (DVR) ใน Android TV
- ทางเลือก
- หากกำลังแสดงวิดีโอแบบภาพซ้อนภาพ ให้ใช้โหมดภาพซ้อนภาพ
媒体投影
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ Manifest ในส่วน
android:foregroundServiceType
mediaProjection
- สิทธิ์ในการประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_MEDIA_PROJECTION
- ค่าคงที่ที่จะส่งไปยัง
startForeground()
FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION
- ข้อกําหนดเบื้องต้นของรันไทม์
เรียกใช้เมธอด
createScreenCaptureIntent()
ก่อนเริ่มบริการที่ทำงานอยู่เบื้องหน้า ซึ่งจะแสดงการแจ้งเตือนสิทธิ์ให้ผู้ใช้ทราบ ผู้ใช้ต้องให้สิทธิ์ก่อนที่คุณจึงจะสร้างบริการได้หลังจากสร้างบริการที่ทำงานอยู่เบื้องหน้าแล้ว คุณจะเรียกใช้
MediaProjectionManager.getMediaProjection()
ได้- คำอธิบาย
ฉายเนื้อหาไปยังจอแสดงผลที่ไม่ใช่อุปกรณ์หลักหรืออุปกรณ์ภายนอกโดยใช้
MediaProjection
API เนื้อหานี้ไม่จำเป็นต้องเป็นเนื้อหาสื่อโดยเฉพาะ- ทางเลือก
หากต้องการสตรีมสื่อไปยังอุปกรณ์อื่น ให้ใช้ Google Cast SDK
麦克风
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ Manifest ในส่วน
android:foregroundServiceType
microphone
- สิทธิ์ในการประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_MICROPHONE
- ค่าคงที่ที่จะส่งไปยัง
startForeground()
FOREGROUND_SERVICE_TYPE_MICROPHONE
- ข้อกําหนดเบื้องต้นของรันไทม์
ขอและได้รับสิทธิ์รันไทม์
RECORD_AUDIO
หมายเหตุ: สิทธิ์รันไทม์
RECORD_AUDIO
อยู่ภายใต้ข้อจำกัดขณะใช้งาน ด้วยเหตุนี้ คุณจึงสร้างmicrophone
บริการที่ทำงานอยู่เบื้องหน้าไม่ได้ขณะที่แอปอยู่ในเบื้องหลัง ยกเว้นบางกรณี ดูข้อมูลเพิ่มเติมได้ที่ข้อจำกัดในการเริ่มบริการที่ทำงานอยู่เบื้องหน้าซึ่งต้องใช้สิทธิ์ขณะใช้งาน- คำอธิบาย
ไมโครโฟนจะบันทึกเสียงจากเบื้องหลังอย่างต่อเนื่อง เช่น โปรแกรมอัดเสียงหรือแอปการสื่อสาร
致电
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ Manifest ในส่วน
android:foregroundServiceType
phoneCall
- สิทธิ์ในการประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_PHONE_CALL
- ค่าคงที่ที่จะส่งไปยัง
startForeground()
FOREGROUND_SERVICE_TYPE_PHONE_CALL
- ข้อกําหนดเบื้องต้นของรันไทม์
เงื่อนไขต่อไปนี้อย่างน้อย 1 ข้อจะต้องเป็นจริง
- แอปได้ประกาศสิทธิ์
MANAGE_OWN_CALLS
ในไฟล์ Manifest
- แอปได้ประกาศสิทธิ์
- แอปเป็นแอปโทรศัพท์เริ่มต้นผ่านบทบาท
ROLE_DIALER
- แอปเป็นแอปโทรศัพท์เริ่มต้นผ่านบทบาท
- คำอธิบาย
ดำเนินการต่อกับการโทรที่กำลังดำเนินอยู่โดยใช้ API ของ
ConnectionService
- ทางเลือก
หากต้องการโทรทางโทรศัพท์ วิดีโอ หรือ VoIP ให้ลองใช้คลัง
android.telecom
ลองใช้
CallScreeningService
เพื่อสกรีนสายเรียกเข้า
远程消息传递
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ Manifest ในส่วน
android:foregroundServiceType
remoteMessaging
- สิทธิ์ในการประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_REMOTE_MESSAGING
- ค่าคงที่ที่จะส่งไปยัง
startForeground()
FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING
- ข้อกําหนดเบื้องต้นของรันไทม์
- ไม่มี
- คำอธิบาย
- โอน SMS จากอุปกรณ์เครื่องหนึ่งไปยังอีกเครื่อง ช่วยเหลืองานการรับส่งข้อความของผู้ใช้ให้มีความต่อเนื่องเมื่อเปลี่ยนอุปกรณ์
短期服务
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ Manifest ในส่วน
android:foregroundServiceType
shortService
- สิทธิ์ในการประกาศในไฟล์ Manifest
- ไม่มี
- ค่าคงที่ที่จะส่งไปยัง
startForeground()
FOREGROUND_SERVICE_TYPE_SHORT_SERVICE
- ข้อกําหนดเบื้องต้นของรันไทม์
- ไม่มี
- คำอธิบาย
ทำงานที่สำคัญซึ่งต้องดำเนินการให้เสร็จโดยไม่มีการหยุดชะงักหรือเลื่อนออกไปได้อย่างรวดเร็ว
ประเภทนี้มีเอกลักษณ์เฉพาะตัวดังนี้
- ทำงานได้เพียงระยะเวลาสั้นๆ (ประมาณ 3 นาที)
- ไม่รองรับบริการที่ทำงานอยู่เบื้องหน้าแบบติดหนึบ
- เริ่มบริการอื่นๆ ที่ทำงานอยู่เบื้องหน้าไม่ได้
- ไม่ต้องมีสิทธิ์เฉพาะประเภท แต่ยังคงต้องใช้สิทธิ์
FOREGROUND_SERVICE
shortService
จะเปลี่ยนเป็นบริการประเภทอื่นได้ก็ต่อเมื่อแอปมีสิทธิ์เริ่มบริการที่ทำงานอยู่เบื้องหน้าใหม่- บริการที่ทำงานอยู่เบื้องหน้าสามารถเปลี่ยนประเภทเป็น
shortService
ได้ทุกเมื่อ ซึ่งจะเป็นจุดเริ่มต้นของระยะเวลาหมดเวลา
การหมดเวลาสําหรับ shortService จะเริ่มนับตั้งแต่ที่มีการเรียกใช้
Service.startForeground()
แอปควรเรียกใช้Service.stopSelf()
หรือService.stopForeground()
ก่อนที่จะเกิดเวลาหมด ไม่เช่นนั้น ระบบจะเรียกService.onTimeout()
ใหม่ ซึ่งแอปจะมีเวลาสั้นๆ ในการเรียกstopSelf()
หรือstopForeground()
เพื่อหยุดให้บริการหลังจากเรียก
Service.onTimeout()
ไม่นาน แอปจะเข้าสู่สถานะแคชและระบบจะไม่ถือว่าแอปอยู่ในเบื้องหน้าอีกต่อไป เว้นแต่ผู้ใช้จะโต้ตอบกับแอปอยู่ ไม่นานหลังจากที่แอปแคชและบริการยังไม่หยุดทำงาน แอปจะได้รับ ANR ข้อความ ANRP พูดถึงFOREGROUND_SERVICE_TYPE_SHORT_SERVICE
ด้วยเหตุนี้ การใช้Service.onTimeout()
การเรียกกลับจึงถือเป็นแนวทางปฏิบัติแนะนำฟีเจอร์ติดต่อกลับ
Service.onTimeout()
ไม่มีให้บริการใน Android 13 และต่ำกว่า หากบริการเดียวกันทำงานในอุปกรณ์ดังกล่าว บริการจะไม่หมดเวลาและจะไม่เกิด ANR ตรวจสอบว่าบริการหยุดทำงานทันทีที่ประมวลผลงานเสร็จ แม้ว่าจะยังไม่ได้รับService.onTimeout()
callback ก็ตามโปรดทราบว่าหากไม่ปฏิบัติตามการหมดเวลาของ
shortService
แอปจะแสดง ANR แม้ว่าจะมีบริการที่ทำงานอยู่เบื้องหน้าอื่นๆ ที่ถูกต้องหรือกระบวนการอื่นๆ ของวงจรชีวิตของแอปที่ทำงานอยู่ก็ตามหากผู้ใช้มองเห็นแอปหรือแอปเป็นไปตามข้อยกเว้นข้อใดข้อหนึ่งซึ่งอนุญาตให้เริ่มบริการที่ทำงานอยู่เบื้องหน้าจากเบื้องหลังได้ การเรียกใช้
Service.StartForeground()
อีกครั้งด้วยพารามิเตอร์FOREGROUND_SERVICE_TYPE_SHORT_SERVICE
จะขยายเวลาหมดเวลาอีก 3 นาที หากผู้ใช้ไม่เห็นแอปและไม่เป็นไปตามข้อยกเว้นข้อใดข้อหนึ่ง การพยายามเริ่มบริการที่ทำงานอยู่เบื้องหน้าอีกรายการหนึ่งไม่ว่าประเภทใดก็ตามจะทำให้เกิดForegroundServiceStartNotAllowedException
หากผู้ใช้ปิดใช้การเพิ่มประสิทธิภาพแบตเตอรี่สำหรับแอปของคุณ แอปจะยังคงได้รับผลกระทบจากการหมดเวลาของ FGS บริการระยะสั้น
หากคุณเริ่มบริการที่ทำงานอยู่เบื้องหน้าซึ่งมีประเภท
shortService
และประเภทบริการที่ทำงานอยู่เบื้องหน้าอื่น ระบบจะไม่สนใจการประกาศประเภทshortService
อย่างไรก็ตาม บริการดังกล่าวยังคงต้องเป็นไปตามข้อกําหนดเบื้องต้นของประเภทอื่นๆ ที่ประกาศไว้ ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบเกี่ยวกับบริการที่ทำงานอยู่เบื้องหน้า
特殊用途
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ Manifest ภายใต้
android:foregroundServiceType
specialUse
- สิทธิ์ในการประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_SPECIAL_USE
- ค่าคงที่ที่จะส่งผ่านไปยัง
startForeground()
FOREGROUND_SERVICE_TYPE_SPECIAL_USE
- ข้อกำหนดเบื้องต้นของรันไทม์
- ไม่มี
- คำอธิบาย
ครอบคลุมกรณีการใช้งานบริการที่ทำงานอยู่เบื้องหน้าที่ถูกต้องซึ่งไม่ครอบคลุมในกรณีการใช้งานอื่น ประเภทบริการที่ทำงานอยู่เบื้องหน้า
นอกจากการประกาศ
FOREGROUND_SERVICE_TYPE_SPECIAL_USE
ประเภทบริการที่ทำงานอยู่เบื้องหน้า นักพัฒนาแอปควรประกาศกรณีการใช้งานใน ไฟล์ Manifest ซึ่งวิธีการคือการระบุองค์ประกอบ<property>
ภายในองค์ประกอบ องค์ประกอบ<service>
ค่าเหล่านี้และกรณีการใช้งานที่เกี่ยวข้อง ตรวจสอบเมื่อคุณส่งแอปใน Google Play Console การใช้งาน กรณีที่คุณใส่นั้นอยู่ในรูปแบบอิสระ และควรตรวจสอบว่าได้ใส่ เพื่อช่วยให้ผู้ตรวจสอบทราบเหตุผลที่คุณต้องใช้specialUse
ประเภท<service android:name="fooService" android:foregroundServiceType="specialUse"> <property android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE" android:value="explanation_for_special_use"/> </service>
系统豁免
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ Manifest ในส่วน
android:foregroundServiceType
systemExempted
- สิทธิ์ในการประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_SYSTEM_EXEMPTED
- ค่าคงที่ที่จะส่งไปยัง
startForeground()
FOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED
- ข้อกําหนดเบื้องต้นของรันไทม์
- ไม่มี
- คำอธิบาย
สงวนไว้สำหรับแอปพลิเคชันของระบบและการผสานรวมระบบที่เฉพาะเจาะจง เพื่อใช้บริการที่ทำงานอยู่เบื้องหน้าต่อไป
หากต้องการใช้ประเภทนี้ แอปต้องเป็นไปตามเกณฑ์ข้อใดข้อหนึ่งต่อไปนี้เป็นอย่างน้อย
- อุปกรณ์อยู่ในสถานะโหมดสาธิต
- แอปเป็นเจ้าของอุปกรณ์
- แอปเป็นเจ้าของเครื่องมือวิเคราะห์
- แอปความปลอดภัยที่มีบทบาท
ROLE_EMERGENCY
- แอปผู้ดูแลระบบอุปกรณ์
- แอปที่มีสิทธิ์
SCHEDULE_EXACT_ALARM
หรือUSE_EXACT_ALARM
และใช้บริการที่ทำงานอยู่เบื้องหน้าเพื่อส่งเสียงปลุกในเบื้องหลังต่อไป รวมถึงการปลุกด้วยระบบสัมผัสเท่านั้น แอป VPN (กำหนดค่าโดยใช้การตั้งค่า > เครือข่ายและอินเทอร์เน็ต > VPN)
มิเช่นนั้น การประกาศประเภทนี้จะทำให้ระบบแสดงข้อผิดพลาด
ForegroundServiceTypeNotAllowedException
使用前台服务类型时强制执行的 Google Play 政策
หากแอปกำหนดเป้าหมายเป็น Android 14 ขึ้นไป คุณจะต้องประกาศประเภทบริการที่ทำงานอยู่เบื้องหน้าของแอปในหน้าเนื้อหาแอปของ Play Console (นโยบาย > เนื้อหาแอป) ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีประกาศประเภทบริการที่ทำงานอยู่เบื้องหน้าใน Play Console ได้ที่การทำความเข้าใจบริการที่ทำงานอยู่เบื้องหน้าและข้อกำหนดของ Intent แบบเต็มหน้าจอ