ระบุการล็อกที่ปลุกซึ่ง API อื่นๆ สร้างขึ้น

ไลบรารีและ API ของระบบหลายรายการสามารถรับการล็อกที่ตื่นอยู่ซึ่งมาจากแอปของคุณได้ ซึ่งอาจทำให้ระบุการล็อกที่ตื่นอยู่ในแอปซึ่งอาจทำให้เกิดปัญหาได้ยาก หากใช้ API ในทางที่ผิด อาจส่งผลให้แอปของคุณใช้การล็อกการปลุกเป็นเวลานานเกินไป แม้ว่าคุณจะไม่ได้เรียกใช้ API การล็อกการปลุกโดยตรงก็ตาม

เอกสารนี้จะแสดงชื่อการทำงานขณะล็อกทั่วไปที่คุณอาจเห็นเมื่อใช้เครื่องมือแก้ไขข้อบกพร่องการทำงานขณะล็อก คุณอาจเห็นชื่อเหล่านี้ในรายงานจาก Android Vitals ด้วย ในบางกรณี ไลบรารีหรือ API ของระบบอาจสร้างการล็อกการปลุก ในกรณีอื่นๆ เครื่องมือจะสร้างความสับสนให้กับชื่อ Wake Lock ที่คุณใช้ในแอปด้วยเหตุผลบางอย่าง คุณสามารถใช้เครื่องมือแก้ไขข้อบกพร่องเพื่อระบุ Wake Lock ที่ทำงานผิดปกติ จากนั้นค้นหาชื่อ Wake Lock ในเอกสารนี้เพื่อระบุ API ที่อาจทำให้เกิดปัญหาและวิธีแก้ปัญหา

เอกสารนี้ครอบคลุมชื่อการล็อกการปลุกต่อไปนี้ ในแต่ละกรณี แม้ว่าระบบอาจสร้างล็อกการปลุกโดยไลบรารีหรือ API อื่น แต่ล็อกดังกล่าวจะมาจากแอปที่เรียกใช้ API นั้น

*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

*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 ซึ่งมาจากแอปของคุณ ให้ลองระบุการล็อกที่เรียกให้ระบบตื่นนั้นและตั้งชื่อใหม่