ไลบรารีและ API ของระบบหลายรายการสามารถรับ Wake Lock ที่ระบุแหล่งที่มาได้ ในแอปของคุณ ซึ่งอาจทำให้ระบุ Wake Lock ในแอปที่ อาจก่อให้เกิดปัญหาได้ยาก หากคุณใช้ API ในทางที่ผิด แอปอาจถือ Wake Lock นานเกินไป แม้ว่าคุณจะไม่ได้เรียกใช้ API ของ Wake Lock โดยตรงก็ตาม
เอกสารนี้แสดงชื่อการทำงานขณะล็อกที่พบบ่อยบางส่วนที่คุณอาจเห็นเมื่อใช้เครื่องมือแก้ไขข้อบกพร่องของการทำงานขณะล็อก คุณอาจเห็นชื่อเหล่านี้ในรายงานจาก Android Vitals ด้วย ในบางกรณี ไลบรารีหรือ System API อาจเป็นผู้สร้าง Wake Lock ในกรณีอื่นๆ มีเหตุผลที่เครื่องมือ ทำให้ชื่อ Wake Lock ที่คุณใช้ในแอปไม่ชัดเจน คุณสามารถใช้เครื่องมือ แก้ไขข้อบกพร่องเพื่อระบุ Wake Lock ที่ทำงานผิดปกติ จากนั้นค้นหาชื่อ Wake Lock ในเอกสารนี้เพื่อระบุว่า API ใดอาจทำให้เกิดปัญหาและ วิธีแก้ปัญหา
เอกสารนี้ครอบคลุมสถานการณ์ที่อาจมีการสร้าง Wake Lock ในแต่ละกรณี แม้ว่าไลบรารีหรือ API อื่นๆ อาจสร้าง Wake lock แต่ระบบจะระบุว่าแอปที่เรียกใช้ API นั้นเป็นผู้สร้างล็อก
AlarmManager
- เสียงและสื่อ
- Firebase Cloud Message (FCM)
- JobScheduler
- ตำแหน่ง
- WorkManager
_UNKNOWN
: แสดงโดยเครื่องมือแก้ไขข้อบกพร่องหากชื่อการทำงานขณะล็อกดูเหมือนจะใช้ ข้อมูลส่วนบุคคลที่ระบุตัวบุคคลนั้นได้ (PII)
AlarmManager
AlarmManager
จะรับ Wake Lock และกำหนดให้เป็นของแอปที่เรียกใช้
AlarmManager
จะรับ Wake Lock เมื่อนาฬิกาปลุกดัง และจะปล่อย
ล็อกเมื่อเมธอด onReceive()
ของการออกอากาศการปลุกทำงาน
เสร็จสิ้น
ชื่อ Wake Lock
AlarmManager
สร้างการทำงานขณะล็อกที่มีชื่อ *alarm*
(เครื่องหมายดอกจันเป็นส่วนหนึ่งของชื่อ Wake Lock ไม่ใช่ไวลด์การ์ด)
คำแนะนำ
เราขอแนะนำให้ปฏิบัติตามแนวทางต่อไปนี้เพื่อเพิ่มประสิทธิภาพการทำงานของสัญญาณเตือน
- ใช้
AlarmManager
เพื่อเพิ่มประสิทธิภาพความถี่ในการตั้งเวลาปลุก - ใช้การปลุก
RTC_WAKEUP
(ซึ่งจะปลุกอุปกรณ์) เมื่อ จำเป็นเท่านั้น - ลดการใช้อาลามและหลีกเลี่ยงการทำงานที่ยาวนานในเมธอด
onReceive()
เสียงและสื่อ
Media API สามารถรับ Wake Lock เมื่อบันทึกหรือเล่นเสียง ระบบจะระบุว่าแอปการโทรเป็นผู้ใช้ Wake Lock
ชื่อ Wake Lock
API สื่อจะรับ Wake Lock ที่มีชื่อต่างๆ ซึ่งขึ้นต้นด้วย Audio
ดังนี้
AudioBitPerfect
: ใช้สำหรับการเล่นเสียง USB แบบไม่สูญเสียข้อมูลAudioDirectOut
: ใช้สำหรับการเล่นเสียงแบบไม่สูญเสียข้อมูลบนทีวีหรืออุปกรณ์พิเศษAudioDup
: ใช้สำหรับการเล่นการแจ้งเตือนขณะเชื่อมต่อผ่านบลูทูธ หรือ USBAudioIn
: ใช้สำหรับการบันทึกเสียงเมื่ออยู่ในโหมดกล้องวิดีโอขณะที่ไมโครโฟน เปิดอยู่AudioMix
: ใช้สำหรับการเล่นเสียงไปยังอุปกรณ์ทั่วไปAudioOffload
: ใช้สำหรับการเล่นเพลงอย่างเดียวในระยะยาว สำหรับแอปที่รองรับ โหมดนี้AudioSpatial
: ใช้สำหรับการเล่นเสียงภาพยนตร์หรือเพลงแบบหลายช่องบน อุปกรณ์ที่รองรับเสียงรอบทิศทางAudioUnknown
: ใช้เมื่อสถานการณ์อื่นๆ ไม่เกี่ยวข้องMmapCapture
: ใช้สำหรับการบันทึกเสียงที่มีเวลาในการตอบสนองต่ำMmapPlayback
: ใช้สำหรับการเล่นที่มีเวลาในการตอบสนองต่ำ เช่น สำหรับการเล่นเกมหรือสำหรับ แอปพลิเคชันเสียงระดับมืออาชีพ
คำแนะนำ
เราขอแนะนำให้ปฏิบัติดังนี้
- อย่าใช้ชื่อการทำงานขณะล็อกที่ขึ้นต้นด้วย
Audio
- หากใช้ Media API คุณไม่จำเป็นต้องขอ Wake Lock โดยตรง แต่สามารถใช้ API เพื่อขอ Wake Lock ที่จำเป็นให้คุณได้
- เมื่อใช้ Media API ให้สิ้นสุดเซสชันสื่อเมื่อไม่ต้องการใช้แล้ว
ข้อความ Firebase Cloud (FCM)
GCM จะรับ Wake Lock ขณะส่งข้อความ Firebase Cloud Message
(FCM) ที่ออกอากาศไปยังแอป ระบบจะปล่อย Wake Lock เมื่อวิธีการออกอากาศ FCM
onMessageReceived()
ทำงานเสร็จ
ชื่อ Wake Lock
GCM จะรับ Wake Lock ที่มีชื่อว่า GOOGLE_C2DM
คำแนะนำ
เราขอแนะนำให้ปฏิบัติตามแนวทางต่อไปนี้เพื่อเพิ่มประสิทธิภาพลักษณะการทำงานของ FCM
- เพิ่มประสิทธิภาพความถี่ในการนำส่ง FCM
- อย่าใช้ FCM ที่มีลำดับความสำคัญสูง เว้นแต่ข้อความนั้นจำเป็นต้อง นำส่งทันที
onMessageReceived()
ให้เสร็จสมบูรณ์โดยเร็วที่สุด ดูข้อมูลเพิ่มเติมได้ที่คำแนะนำเกี่ยวกับ Firebase
JobScheduler
งาน JobScheduler จะได้ล็อกการปลุกระบบขณะดำเนินงานใน เบื้องหลัง ระบบจะระบุการล็อกการปลุกให้กับแอปที่สร้าง Worker
ชื่อ Wake Lock
ชื่อ Wake Lock ที่ JobScheduler ได้รับจะขึ้นอยู่กับเวอร์ชันของระบบ Android ที่ทำงานอยู่และวัตถุประสงค์ของงาน
รายการที่อยู่ในวงเล็บเหลี่ยมคือตัวแปร เช่น "<package_name>" คือชื่อแพ็กเกจของแอป ไม่ใช่ข้อความตามตัวอักษร <package name>
อย่างไรก็ตาม *job*
คือลำดับอักขระ
*job*
ที่มีเครื่องหมายดอกจัน โดยเครื่องหมายดอกจันไม่ได้ใช้เป็นไวลด์การ์ด
Android 15 และต่ำกว่า
งานที่ผู้ใช้เริ่มจะสร้างการล็อกการปลุกที่มีชื่อตามรูปแบบต่อไปนี้
*job*u/@<name_space>@/<package_name>/<classname>
งานอื่นๆ ที่ใช้รูปแบบนี้
*job*/@<name_space>@/<package_name>/<classname>
Android 16 ขึ้นไป
งานที่ผู้ใช้เริ่มจะสร้างการล็อกการปลุกที่มีชื่อตามรูปแบบต่อไปนี้
*job*u/@<name_space>@/#<trace_tag>#/<package_name>/<classname>
งานด่วนใช้รูปแบบต่อไปนี้
*job*e/@<name_space>@/#<trace_tag>#/<package_name>/<classname>
งานปกติใช้รูปแบบนี้
*job*r/@<name_space>@/#<trace_tag>#/<package_name>/<classname>
ตัวอย่าง
สมมติว่ามีงานเร่งด่วนที่มีเนมสเปซ backup
และแท็กการติดตาม started
ชื่อแพ็กเกจคือ com.example.app
และคลาสที่
สร้างงานคือ com.backup.BackupFileService
ในอุปกรณ์ที่ใช้ Android 15 หรือต่ำกว่า การล็อกการปลุกจะมีชื่อดังนี้
*job*/@backup@/com.example.app/com.backup.BackupFileService
ในอุปกรณ์ที่ใช้ Android 16 ขึ้นไป การล็อกการปลุกจะมีชื่อดังนี้
*job*e/@backup@/#started#/com.example.app/com.backup.BackupFileService
คำแนะนำ
ตรวจสอบการใช้งานงาน JobScheduler โดยเฉพาะอย่างยิ่ง ให้ทำตามคำแนะนำของเราสำหรับการเพิ่มประสิทธิภาพการใช้แบตเตอรี่สำหรับ API การตั้งเวลางาน
ตำแหน่ง
LocationManager
และ FusedLocationProviderClient
ใช้
การล็อกการปลุกเพื่อรับและส่งตำแหน่งของอุปกรณ์ ระบบจะระบุแหล่งที่มาของ Wake Lock
ไปยังแอปที่เรียก API เหล่านั้น
ชื่อ Wake Lock
บริการตำแหน่งใช้ชื่อต่อไปนี้
CollectionLib-SigCollector
NetworkLocationLocator
NetworkLocationScanner
NlpCollectorWakeLock
NlpWakeLock
*location*
คำแนะนำ
เพิ่มประสิทธิภาพการใช้ตำแหน่ง เช่น ตั้งค่าการหมดเวลา คำขอตำแหน่งแบบเป็นกลุ่ม หรือใช้การอัปเดตตำแหน่งแบบพาสซีฟ
WorkManager
Worker ของ WorkManager จะได้รับล็อกการปลุกระบบขณะดำเนินการในเบื้องหลัง ระบบจะระบุการล็อกการปลุกให้กับแอปที่สร้าง Worker
ชื่อ Wake Lock
ชื่อ Wake Lock ที่ WorkManager ได้รับจะขึ้นอยู่กับเวอร์ชันของระบบ Android ที่กำลังทำงานอยู่
Android 15 และต่ำกว่า
งาน WorkManager จะสร้างการทำงานขณะล็อกที่มีชื่อตามรูปแบบต่อไปนี้
*job*/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
Android 16 ขึ้นไป
งานที่เร่งด่วนจะสร้างการล็อกการปลุกที่มีชื่อตามรูปแบบต่อไปนี้
*job*e/#<trace_tag>#/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
งานปกติจะมีรูปแบบดังนี้
*job*r/#<trace_tag>#/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
โดยค่าเริ่มต้น <trace_tag>
คือชื่อผู้ปฏิบัติงาน
ตัวอย่าง
สมมติว่ามีผู้ปฏิบัติงานที่เร่งด่วนชื่อ BackupFileWorker
ชื่อแพ็กเกจ
คือ com.example.app
ในอุปกรณ์ที่ใช้ Android 15 หรือต่ำกว่า การล็อกการปลุกจะมีชื่อดังนี้
*job*/com.example.app/androidx.work.impl.background.systemjob.SystemJobService
ในอุปกรณ์ที่ใช้ Android 16 ขึ้นไป การล็อกการปลุกจะมีชื่อดังนี้
*job*e/#BackupFileWorker#/com.example.app/androidx.work.impl.background.systemjob.SystemJobService
คำแนะนำ
ตรวจสอบการใช้งาน Worker ของ WorkManager โดยเฉพาะอย่างยิ่ง ให้ทำตามคำแนะนำของเราสำหรับการเพิ่มประสิทธิภาพการใช้แบตเตอรี่สำหรับ API การตั้งเวลางาน
_UNKNOWN
หากเครื่องมือแก้ไขข้อบกพร่องคิดว่าชื่อ Wake Lock มีข้อมูลส่วนบุคคลที่ระบุตัวบุคคลนั้นได้ (PII) เครื่องมือจะไม่แสดงชื่อ Wake Lock จริง แต่จะ
ติดป้ายกำกับการล็อกปลุกเป็น _UNKNOWN
แทน เช่น เครื่องมืออาจทำเช่นนี้หากชื่อ Wake
lock มีอีเมล
คำแนะนำ
ทําตามแนวทางปฏิบัติแนะนําในการตั้งชื่อการทํางานขณะล็อก และหลีกเลี่ยงการใช้ PII ในชื่อการทํางานขณะล็อก หากพบ Wake Lock ที่ชื่อ _UNKNOWN
ซึ่งเชื่อมโยงกับแอปของคุณ ให้ลอง
ระบุว่า Wake Lock นั้นคืออะไร แล้วตั้งชื่ออื่น