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

ไลบรารีและ 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

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: ใช้สำหรับการเล่นการแจ้งเตือนขณะเชื่อมต่อผ่านบลูทูธ หรือ USB
  • AudioIn: ใช้สำหรับการบันทึกเสียงเมื่ออยู่ในโหมดกล้องวิดีโอขณะที่ไมโครโฟน เปิดอยู่
  • 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

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 นั้นคืออะไร แล้วตั้งชื่ออื่น