ไลบรารีและ API ของระบบหลายรายการสามารถรับการล็อกที่ตื่นอยู่ซึ่งมาจากแอปของคุณได้ ซึ่งอาจทำให้ระบุการล็อกที่ตื่นอยู่ในแอปซึ่งอาจทำให้เกิดปัญหาได้ยาก หากใช้ API ในทางที่ผิด อาจส่งผลให้แอปของคุณใช้การล็อกการปลุกเป็นเวลานานเกินไป แม้ว่าคุณจะไม่ได้เรียกใช้ API การล็อกการปลุกโดยตรงก็ตาม
เอกสารนี้จะแสดงชื่อการทำงานขณะล็อกทั่วไปที่คุณอาจเห็นเมื่อใช้เครื่องมือแก้ไขข้อบกพร่องการทำงานขณะล็อก คุณอาจเห็นชื่อเหล่านี้ในรายงานจาก Android Vitals ด้วย ในบางกรณี ไลบรารีหรือ API ของระบบอาจสร้างการล็อกการปลุก ในกรณีอื่นๆ เครื่องมือจะสร้างความสับสนให้กับชื่อ Wake Lock ที่คุณใช้ในแอปด้วยเหตุผลบางอย่าง คุณสามารถใช้เครื่องมือแก้ไขข้อบกพร่องเพื่อระบุ Wake Lock ที่ทำงานผิดปกติ จากนั้นค้นหาชื่อ Wake Lock ในเอกสารนี้เพื่อระบุ API ที่อาจทำให้เกิดปัญหาและวิธีแก้ปัญหา
เอกสารนี้ครอบคลุมชื่อการล็อกการปลุกต่อไปนี้ ในแต่ละกรณี แม้ว่าระบบอาจสร้างล็อกการปลุกโดยไลบรารีหรือ API อื่น แต่ล็อกดังกล่าวจะมาจากแอปที่เรียกใช้ API นั้น
*alarm*
: สร้างโดยAlarmManager
AudioIn
,AudioMix
: สร้างโดย Media APIGOOGLE_C2DM
: ได้รับขณะส่ง Firebase Cloud Message (FCM) ไปยังแอป*job*/<package_name>/<package_and_job_name>
: สร้างโดยงาน JobScheduler*job*/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
: สร้างโดยผู้ปฏิบัติงาน WorkManagerNetworkLocationLocator
,FusedLocation
,*location*
: สร้างโดย API ตำแหน่ง_UNKNOWN
: แสดงโดยเครื่องมือแก้ไขข้อบกพร่องหากชื่อการล็อกขณะตื่นดูเหมือนจะใช้ข้อมูลส่วนบุคคลที่ระบุตัวบุคคลนั้นได้ (PII)
*alarm*
AlarmManager
จะรับการล็อกนี้และระบุแหล่งที่มาว่ามาจากแอปที่เรียกใช้ AlarmManager
จะรับการล็อกเมื่อนาฬิกาปลุกดังขึ้น และปล่อยล็อกเมื่อเมธอด onReceive()
ของประกาศการปลุกดำเนินการเสร็จสิ้น
คำแนะนำ
เราขอแนะนําแนวทางปฏิบัติต่อไปนี้เพื่อเพิ่มประสิทธิภาพการทํางานของการปลุก
- ใช้
AlarmManager
เพื่อเพิ่มประสิทธิภาพความถี่ในการตั้งเวลาการปลุก - ใช้การปลุก
RTC_WAKEUP
(ซึ่งปลุกอุปกรณ์) เมื่อจำเป็นเท่านั้น - ใช้การปลุกให้น้อยที่สุดและหลีกเลี่ยงการทำงานที่ใช้เวลานานในเมธอด
onReceive()
AudioIn
, AudioMix
ฯลฯ
Media API จะรับข้อมูลล็อกที่ปลุกอยู่ต่างๆ ซึ่งมีชื่อขึ้นต้นด้วย Audio
เมื่อบันทึกหรือเล่นเสียง การล็อกการปลุกจะมาจากแอปที่เรียกใช้
AudioIn
ได้มาในระหว่างการจับภาพ AudioRecord
ในโหมดวิดีโอแคมขณะที่ไมโครโฟนทำงานอยู่ AudioMix
ได้รับระหว่างการเล่น AudioTrack
ไปยังอุปกรณ์ Media API อื่นๆ อาจใช้ล็อกการปลุกที่มีชื่ออื่นๆ ซึ่งขึ้นต้นด้วย Audio
คำแนะนำ
เราขอแนะนําให้ทําตามแนวทางปฏิบัติต่อไปนี้
- อย่าใช้ชื่อการทำงานขณะล็อกที่ขึ้นต้นด้วย
Audio
- หากใช้ Media API คุณไม่จำเป็นต้องขอการล็อกการปลุกโดยตรง คุณสามารถไว้วางใจให้ API ขอการล็อกการปลุกที่จำเป็นให้คุณได้
- เมื่อใช้ Media API ให้ปิดเซสชันสื่อเมื่อไม่ต้องการใช้งานอีกต่อไป
GOOGLE_C2DM
GCM จะรับการล็อกการปลุกนี้ขณะส่งการออกอากาศ Firebase Cloud Message (FCM) ไปยังแอป ระบบจะยกเลิกการล็อกการปลุกเมื่อวิธีการออกอากาศ FCM onMessageReceived()
ดำเนินการเสร็จสิ้น
คำแนะนำ
เราขอแนะนําแนวทางปฏิบัติต่อไปนี้เพื่อเพิ่มประสิทธิภาพลักษณะการทํางานของ FCM
- เพิ่มประสิทธิภาพความถี่ในการนำส่ง FCM
- อย่าใช้ FCM ที่มีลำดับความสำคัญสูง เว้นแต่ว่าจะต้องนำส่งข้อความในทันที
- ดำเนินการตามวิธี
onMessageReceived()
ให้เสร็จสมบูรณ์โดยเร็วที่สุด ดูข้อมูลเพิ่มเติมได้ที่คําแนะนําเกี่ยวกับ Firebase
*job*/<package_name>/<package_and_job_name>
งาน JobScheduler จะใช้การล็อกการปลุกเหล่านี้ขณะทำงานในเบื้องหลัง การล็อกที่ปลุกระบบจะมาจากแอปที่สร้าง Foreground Services
"<package_name>" คือชื่อแพ็กเกจของแอป ไม่ใช่ข้อความ <package name>
ในทํานองเดียวกัน "<package_and_job_name>"
คือชื่อแพ็กเกจตามด้วยชื่องาน *job*
คือลำดับอักขระ
*job*
ที่มีเครื่องหมายดอกจัน แต่ไม่ได้ใช้เป็นไวลด์การ์ด
ตัวอย่างชื่อการล็อกที่ปลุกอยู่มีดังนี้
*job*/com.example.app/com.example.app.example.path.ExampleJobService
คำแนะนำ
ตรวจสอบการใช้งานของ JobScheduler โดยเฉพาะอย่างยิ่ง ให้ทําตามคําแนะนําของเราสําหรับการเพิ่มประสิทธิภาพการใช้แบตเตอรี่สําหรับ API การจัดตารางงาน
*job*/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
การทำงานขณะล็อกเหล่านี้ใช้โดยผู้ปฏิบัติงาน WorkManager ขณะดําเนินการงานในเบื้องหลัง การล็อกที่ปลุกระบบจะมาจากแอปที่สร้าง Foreground Services
"<package_name>" คือชื่อแพ็กเกจของแอป ไม่ใช่ข้อความ <package name>
*job*
คือลำดับอักขระ
*job*
ที่มีเครื่องหมายดอกจัน แต่ไม่ได้ใช้เป็นไวลด์การ์ด
คำแนะนำ
ตรวจสอบการใช้ผู้ปฏิบัติงาน WorkManager โดยเฉพาะอย่างยิ่ง ให้ทําตามคําแนะนําของเราสําหรับการเพิ่มประสิทธิภาพการใช้แบตเตอรี่สําหรับ API การจัดตารางงาน
NetworkLocationLocator
, FusedLocation
, *location*
LocationManager
และ FusedLocationProviderClient
ใช้ชื่อการปลุกเหล่านี้เพื่อรับและส่งตำแหน่งของอุปกรณ์ การล็อกที่ปลุกระบบจะมาจากแอปที่เรียกใช้ API เหล่านั้น
คำแนะนำ
เพิ่มประสิทธิภาพการใช้ตําแหน่ง เช่น ตั้งค่าการหมดเวลา ส่งคําขอตําแหน่งเป็นกลุ่ม หรือใช้การอัปเดตตําแหน่งแบบไม่ระบุ
_UNKNOWN
หากเครื่องมือแก้ไขข้อบกพร่องคิดว่าชื่อการล็อกจากการตื่นมีข้อมูลส่วนบุคคลที่ระบุตัวบุคคลนั้นได้ (PII) เครื่องมือจะไม่แสดงชื่อการล็อกจากการตื่นจริง แต่จะใช้การติดป้ายกำกับการปลุกเป็น _UNKNOWN
แทน เช่น เครื่องมืออาจดำเนินการนี้หากชื่อล็อกปลุกมีอีเมล
คำแนะนำ
ทําตามแนวทางปฏิบัติแนะนําในการตั้งชื่อการทํางานขณะล็อก และหลีกเลี่ยงการใช้ PII ในชื่อการทํางานขณะล็อก หากพบการล็อกที่เรียกให้ระบบตื่นชื่อ _UNKNOWN
ซึ่งมาจากแอปของคุณ ให้ลองระบุการล็อกที่เรียกให้ระบบตื่นนั้นและตั้งชื่อใหม่