เอกสารนี้จะช่วยคุณระบุและเพิ่มประสิทธิภาพกรณีการใช้งาน Wake Lock ในแอป รวมถึงไฮไลต์ว่ามี Wake Lock ที่ได้มาจากไลบรารีอื่นๆ หรือ API ของระบบที่เชื่อมโยงกับกรณีการใช้งานนี้หรือไม่ เนื่องจาก Wake Lock เหล่านี้มาจากแอปของคุณ การระบุแหล่งที่มาของ Wake Lock ที่เป็นปัญหาจึงอาจเป็นเรื่องยาก การใช้ API ที่ไม่ถูกต้องอาจทำให้แอปของคุณถูกแจ้งว่ามีการใช้ Wake Lock มากเกินไป แม้ว่าคุณจะไม่ได้ใช้ Wake Lock อย่างชัดแจ้งก็ตาม
เอกสารนี้แสดงชื่อ Wake Lock ทั่วไปบางชื่อที่คุณอาจพบเมื่อใช้เครื่องมือแก้ไขข้อบกพร่อง Wake Lock หรือในรายงานจาก Vitals ชื่อเหล่านี้อาจมาจากไลบรารีหรือ API ของระบบ หรืออาจมีการสร้างความสับสน การใช้เครื่องมือแก้ไขข้อบกพร่องเพื่อระบุ Wake Lock ที่ทำงานผิดปกติ แล้วค้นหาชื่อ Wake Lock ในเอกสารนี้จะช่วยให้คุณระบุได้ว่า API ใดอาจเป็นสาเหตุของปัญหา และดูคำแนะนำเกี่ยวกับวิธีเพิ่มประสิทธิภาพการใช้งาน API ดังกล่าว
เอกสารนี้จะอธิบาย Use Case ทั่วไปสำหรับการรับ Wake Lock โดยระบุรายละเอียดชื่อ Wake Lock ที่ API และไลบรารีต่างๆ ใช้ รวมถึงให้คำแนะนำและแนวทางปฏิบัติแนะนำสำหรับการเพิ่มประสิทธิภาพและลดการใช้ Wake Lock
- AlarmManager
- เสียงและสื่อ
- บลูทูธ
- เซ็นเซอร์ของอุปกรณ์
- Firebase Cloud Message (FCM)
- JobScheduler
- ตำแหน่ง
- การรับส่งข้อความระยะไกล
- WorkManager
_UNKNOWN: แสดงโดยเครื่องมือแก้ไขข้อบกพร่องหากชื่อ Wake Lock ดูเหมือนจะใช้ข้อมูลส่วนบุคคลที่ระบุตัวบุคคลนั้นได้ (PII)
AlarmManager
AlarmManager จะรับ Wake Lock และระบุแหล่งที่มาของ Wake Lock ไปยังแอปที่เรียกใช้ AlarmManager จะรับ Wake Lock เมื่อนาฬิกาปลุกดัง และปล่อยล็อกเมื่อเมธอด onReceive() ของการประกาศการปลุกทำงานเสร็จสิ้น
ชื่อ Wake Lock
AlarmManager สร้าง Wake Lock ด้วยชื่อ *alarm* (เครื่องหมายดอกจันเป็นส่วนหนึ่งของชื่อ Wake Lock ไม่ได้แสดงถึงไวลด์การ์ด)
คำแนะนำ
เราขอแนะนำให้ทำตามแนวทางปฏิบัติต่อไปนี้เพื่อเพิ่มประสิทธิภาพลักษณะการทำงานของสัญญาณเตือน
- โปรดดูหัวข้อเลือกประเภทการปลุกเพื่อตัดสินใจระหว่างการปลุกแบบไม่เจาะจงหรือแบบเจาะจง หากการปลุกไม่จำเป็นต้องแม่นยำ ให้ใช้การปลุกในเวลาที่ไม่แน่นอนเพื่อให้ระบบมีความยืดหยุ่นมากขึ้นในการกำหนดเวลา ซึ่งจะช่วยยืดอายุการใช้งานแบตเตอรี่ได้
- โปรดคำนึงถึงโควต้าการปลุกที่ระบบกำหนดและออกแบบแอปให้เป็นไปตามโควต้าดังกล่าว
- หลีกเลี่ยงการทำงานที่ใช้เวลานานในเมธอด
onReceive()และกำหนดเวลาให้ผู้ปฏิบัติงานหากจำเป็นต้องมีการประมวลผลเพิ่มเติมหลังจากการปลุก
เสียงและสื่อ
Media API สามารถรับ Wake Lock ได้เมื่อบันทึกหรือเล่นเสียง Wake Lock จะมาจากแอปการโทร
ชื่อ Wake Lock
Media API จะได้รับ Wake Lock ที่มีชื่อต่างๆ ซึ่งขึ้นต้นด้วย Audio ดังนี้
AudioBitPerfect: ใช้สำหรับการเล่นเสียง USB แบบไม่สูญเสียรายละเอียดAudioDirectOut: ใช้สำหรับการเล่นเสียงแบบไม่สูญเสียรายละเอียดในทีวีหรืออุปกรณ์พิเศษAudioDup: ใช้สำหรับการเล่นการแจ้งเตือนขณะเชื่อมต่อโดยใช้บลูทูธหรือ USBAudioIn: ใช้สำหรับการบันทึกเสียงเมื่ออยู่ในโหมดกล้องบันทึกวิดีโอขณะที่ไมโครโฟนทำงานอยู่AudioMix: ใช้สำหรับการเล่นเสียงไปยังอุปกรณ์ทั่วไปAudioOffload: ใช้สำหรับการเล่นเพลงเท่านั้นในระยะยาว สำหรับแอปที่รองรับโหมดนี้AudioSpatial: ใช้สำหรับการเล่นเสียงภาพยนตร์หรือเพลงแบบหลายช่องทางในอุปกรณ์ที่รองรับเสียงรอบทิศทางAudioUnknown: ใช้เมื่อสถานการณ์อื่นๆ ไม่เกี่ยวข้องMmapCapture: ใช้สำหรับการบันทึกเสียงที่มีเวลาในการตอบสนองต่ำMmapPlayback: ใช้สำหรับการเล่นที่มีเวลาในการตอบสนองต่ำ เช่น สำหรับการเล่นเกมหรือสำหรับแอปพลิเคชันเสียงระดับมืออาชีพ
คำแนะนำ
เราขอแนะนำให้ทำตามแนวทางปฏิบัติต่อไปนี้
- อย่าประกาศชื่อ Wake Lock ที่ขึ้นต้นด้วย
Audio - หากใช้ Media API คุณไม่จำเป็นต้องรับ Wake Lock โดยตรง แต่สามารถใช้ API เพื่อรับ Wake Lock ที่จำเป็นให้คุณได้
- เมื่อใช้ Media API ให้สิ้นสุดเซสชันสื่อและบริการที่ทำงานอยู่เบื้องหน้าที่เกี่ยวข้องเมื่อไม่จำเป็นต้องใช้แล้ว
บลูทูธ
API บลูทูธของแพลตฟอร์มจะเก็บ Wake Lock ของเคอร์เนลเป็นหลักขณะที่การดำเนินการของบลูทูธเกิดขึ้น ซึ่งไม่สามารถระบุแหล่งที่มาของแอปพลิเคชันได้
คำแนะนำ
- ใช้การจับคู่อุปกรณ์ที่ใช้ร่วมกันเพื่อจับคู่อุปกรณ์บลูทูธเพื่อหลีกเลี่ยงการรับ Wake Lock ด้วยตนเองระหว่างการจับคู่บลูทูธ
- โปรดดูคำแนะนำเกี่ยวกับการสื่อสารในเบื้องหลังเพื่อทำความเข้าใจวิธีสื่อสารผ่านบลูทูธในเบื้องหลัง
- การใช้
WorkManagerมักจะเพียงพอหากการสื่อสารที่ล่าช้าไม่ส่งผลกระทบต่อผู้ใช้ หากเห็นว่าจำเป็นต้องใช้ Wake Lock ด้วยตนเอง ให้คง Wake Lock ไว้เฉพาะในช่วงที่มีกิจกรรมบลูทูธหรือการประมวลผลข้อมูลกิจกรรมเท่านั้น
เซ็นเซอร์ของอุปกรณ์
การติดตามข้อมูลเซ็นเซอร์ของอุปกรณ์ เช่น จำนวนก้าว ข้อมูลตัวตรวจวัดความเร่ง หรือเครื่องวัดการหมุน มีอยู่หลายวิธี
ใน Wear OS ให้ใช้บริการข้อมูลสุขภาพของ Wear เพื่อดึงข้อมูลอุปกรณ์ เช่น ระดับความสูง อัตราการเต้นของหัวใจ และระยะทางที่เดินทาง
หากแอปพลิเคชันอื่นๆ เป็นผู้รวบรวมข้อมูล คุณสามารถใช้ Health Connect ร่วมกับ WorkManager เพื่อดึงข้อมูลเป็นระยะๆ ได้
สำหรับสถานการณ์ต่างๆ เช่น การติดตามเดลต้าของจำนวนก้าวหรือระยะทางที่เดินทาง คุณสามารถใช้ Recording API บนอุปกรณ์เคลื่อนที่ร่วมกับ WorkManager เพื่อดึงข้อมูลเป็นระยะๆ ได้ หากต้องการเข้าถึงข้อมูลจำนวนก้าวที่ผ่านมา (เช่น จำนวนก้าวทั้งหมดในแต่ละวัน หรือจำนวนก้าวในช่วง 6 ชั่วโมงที่ผ่านมา) Health Connect ยังรองรับการติดตามจำนวนก้าวในอุปกรณ์สำหรับอุปกรณ์ที่ใช้ Android 14 ขึ้นไป
ในบางสถานการณ์ อาจจำเป็นต้องใช้การติดตามเซ็นเซอร์อุปกรณ์ที่กำหนดเองโดยใช้ SensorManager SensorManager ไม่ได้รับ Wake Lock ในนามของแอป เว้นแต่เซ็นเซอร์จะเป็นเซ็นเซอร์ปลุก ซึ่งสามารถระบุได้โดยใช้ API isWakeUpSensor
คำแนะนำ
การใช้เซ็นเซอร์เพื่อบันทึกที่อัตราการสุ่มตัวอย่างสูงอาจทำให้แบตเตอรี่หมดเร็วขึ้นอย่างมาก ต่อไปนี้คือคำแนะนำในการลดการใช้แบตเตอรี่และการใช้ Wake Lock
- หากติดตามจำนวนก้าวหรือระยะทางที่เดินทาง ให้ใช้ Recording API เพื่อบันทึกข้อมูลในลักษณะที่ประหยัดแบตเตอรี่ สำหรับอุปกรณ์ที่ใช้ Android 14 ขึ้นไป ให้พิจารณาใช้ Health Connect เพื่อเข้าถึงข้อมูลย้อนหลังของอุปกรณ์และจำนวนก้าวรวม
- สำหรับการติดตามเซ็นเซอร์แบบพาสซีฟใน Wear OS ให้ใช้บริการข้อมูลสุขภาพของ Wear เพื่อเพิ่มประสิทธิภาพการใช้งานแบตเตอรี่
- เมื่อลงทะเบียนเซ็นเซอร์ด้วย
SensorManagerให้กำหนดmaxReportLatencyUsที่มากกว่า 30 วินาทีเพื่อใช้ตรรกะการจัดกลุ่มเซ็นเซอร์และลดจำนวนการขัดจังหวะที่แอปพลิเคชันได้รับ เมื่ออุปกรณ์ถูกปลุกในภายหลังด้วยทริกเกอร์อื่น เช่น การโต้ตอบของผู้ใช้ การดึงข้อมูลตำแหน่ง หรือการทำงานที่กำหนดเวลาไว้ ระบบจะส่งข้อมูลเซ็นเซอร์ที่แคชไว้ทันที - หากแอปของคุณต้องการทั้งข้อมูลตำแหน่งและข้อมูลเซ็นเซอร์ ให้ซิงค์การดึงข้อมูลและการประมวลผลเหตุการณ์ การรวมค่าที่อ่านได้จากเซ็นเซอร์เข้ากับ Wake Lock สั้นๆ ที่ระบบใช้สำหรับการอัปเดตตำแหน่งจะช่วยให้คุณไม่ต้องใช้ Wake Lock เพื่อให้ CPU ทำงานอยู่ตลอดเวลา ใช้ Worker หรือ Wake Lock ระยะสั้นเพื่อจัดการการอัปโหลดและการประมวลผลข้อมูลที่รวมกันนี้
Firebase Cloud Message (FCM)
ระบบจะได้รับ Wake Lock ขณะส่งการออกอากาศ Firebase Cloud Message (FCM) ไปยังแอป Wake Lock จะถูกปล่อยเมื่อเมธอด onMessageReceived() ของการออกอากาศ FCM ทำงานเสร็จสิ้น
ชื่อ Wake Lock
เมื่ออุปกรณ์ได้รับข้อความ FCM ระบบจะใช้ Wake Lock สั้นๆ โดยใช้ชื่อ GOOGLE_C2DM ส่วนใน Android 16 ขึ้นไป ชื่อ Wake Lock จะเป็น GCM_MESSAGE
คำแนะนำ
เราขอแนะนำแนวทางปฏิบัติต่อไปนี้เพื่อเพิ่มประสิทธิภาพลักษณะการทำงานของ FCM
- เพิ่มประสิทธิภาพความถี่ในการนำส่ง FCM
- อย่าใช้ FCM ที่มีลำดับความสำคัญสูง เว้นแต่ว่าข้อความนั้นจำเป็นต้องส่งทันทีจริงๆ
- ทำให้เมธอด
onMessageReceived()ทำงานเสร็จโดยเร็วที่สุด หรือกำหนดเวลาให้ผู้ปฏิบัติงานทำงานต่อหากจำเป็นต้องมีการประมวลผลเพิ่มเติม ดูข้อมูลเพิ่มเติมได้ที่คำแนะนำเกี่ยวกับ Firebase
JobScheduler
งาน JobScheduler จะได้รับ Wake Lock ขณะทำงานในเบื้องหลัง Wake Lock จะมาจากแอปที่สร้างผู้ปฏิบัติงาน
ชื่อ Wake Lock
ชื่อ Wake Lock ที่ JobScheduler ได้รับจะขึ้นอยู่กับเวอร์ชันของระบบ Android ที่ใช้งานอยู่และวัตถุประสงค์ของงาน
รายการที่อยู่ในวงเล็บสามเหลี่ยมคือตัวแปร เช่น "<package_name>" คือชื่อแพ็กเกจของแอป ไม่ใช่ข้อความ <package name> ตามตัวอักษร อย่างไรก็ตาม *job* คือลำดับอักขระ *job* ที่มีเครื่องหมายดอกจัน โดยเครื่องหมายดอกจันไม่ได้ใช้เป็นไวลด์การ์ด
Android 15 และต่ำกว่า
งานที่ผู้ใช้เริ่มจะสร้าง Wake Lock ที่มีชื่อตามรูปแบบต่อไปนี้
*job*u/@<name_space>@/<package_name>/<classname>
งานอื่นๆ ใช้รูปแบบนี้
*job*/@<name_space>@/<package_name>/<classname>
Android 16 QPR2 ขึ้นไป
งานที่ผู้ใช้เริ่มจะสร้าง Wake Lock ที่มีชื่อตามรูปแบบต่อไปนี้
*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 หรือต่ำกว่า Wake Lock จะมีชื่อดังนี้
*job*/@backup@/com.example.app/com.backup.BackupFileService
ในอุปกรณ์ที่ใช้ Android 16 QPR2 ขึ้นไป Wake Lock จะมีชื่อดังนี้
*job*e/@backup@/#started#/com.example.app/com.backup.BackupFileService
คำแนะนำ
- อย่ารับ Wake Lock ด้วยตนเองสำหรับกรณีการใช้งานการดาวน์โหลด/ อัปโหลดที่ผู้ใช้เริ่ม แต่ให้ใช้ API การโอนข้อมูลที่เริ่มต้นโดยผู้ใช้ (UIDT) แทน นี่คือเส้นทางที่กำหนดไว้สำหรับงานการโอนข้อมูลที่ใช้เวลานานซึ่งเริ่มต้นโดยผู้ใช้
- หากคุณระบุ Wake Lock ที่สร้างโดย JobScheduler ที่มีการใช้งาน Wake Lock สูง อาจเป็นเพราะคุณกำหนดค่าไม่ถูกต้องให้งานไม่เสร็จสมบูรณ์ในบางสถานการณ์ พิจารณาวิเคราะห์สาเหตุที่งานหยุดทำงาน โดยเฉพาะอย่างยิ่งหากคุณเห็น
STOP_REASON_TIMEOUTเกิดขึ้นบ่อยครั้ง - ตรวจสอบการใช้งาน JobScheduler ของคุณ โดยเฉพาะอย่างยิ่ง ให้ทำตามคำแนะนำของเราเกี่ยวกับการเพิ่มประสิทธิภาพการใช้แบตเตอรี่สำหรับ API การกำหนดเวลางาน
ตำแหน่ง
LocationManager และ FusedLocationProviderClient ใช้ Wake Lock เพื่อรับและส่งตำแหน่งของอุปกรณ์ Wake Lock จะมาจากแอปที่เรียกใช้ API เหล่านั้น
ชื่อ Wake Lock
บริการตำแหน่งใช้ชื่อต่อไปนี้
CollectionLib-SigCollectorNetworkLocationLocatorNetworkLocationScannerNlpCollectorWakeLockNlpWakeLock*location*
คำแนะนำ
- โปรดอ่านคําแนะนําเพื่อเพิ่มประสิทธิภาพการใช้ตำแหน่ง พิจารณาใช้การหมดเวลา ใช้ประโยชน์จากการจัดกลุ่มคำขอตำแหน่ง หรือใช้การอัปเดตตำแหน่งแบบพาสซีฟ
- หลีกเลี่ยงการรับ Wake Lock แบบต่อเนื่องแยกต่างหากสำหรับการแคชข้อมูลตำแหน่ง เนื่องจากเป็นการดำเนินการที่ซ้ำซ้อนและควรนำออก
เมื่อขออัปเดตตำแหน่งโดยใช้ API
FusedLocationProviderหรือLocationManagerระบบจะทริกเกอร์การปลุกอุปกรณ์โดยอัตโนมัติระหว่างการเรียกกลับเหตุการณ์ตำแหน่ง แต่ให้จัดเก็บเหตุการณ์ตำแหน่งไว้ในหน่วยความจำหรือพื้นที่เก็บข้อมูล และประมวลผลเหตุการณ์ตำแหน่งเป็นระยะๆ โดยใช้WorkManager
การรับส่งข้อความระยะไกล
ส่วนนี้จะกล่าวถึงสถานการณ์ที่เกี่ยวข้องกับการรับส่งข้อความระยะไกลซึ่งแอปอาจต้องรักษาการเชื่อมต่อหรือตอบสนองต่อเหตุการณ์จากอุปกรณ์อื่นๆ ซึ่งอาจส่งผลต่อการใช้ Wake Lock กรณีการใช้งานที่พบบ่อยมีดังนี้
- แอปที่ใช้ร่วมกันสำหรับการตรวจสอบวิดีโอหรือเสียงซึ่งจำเป็นต้องตรวจสอบเหตุการณ์ที่เกิดขึ้นในอุปกรณ์ภายนอกที่เชื่อมต่อผ่านเครือข่ายภายใน
- แอปรับส่งข้อความที่คงการเชื่อมต่อซ็อกเก็ตเครือข่ายกับตัวแปรเดสก์ท็อป
การปลุกส่วนใหญ่ในสถานการณ์การรับส่งข้อความระยะไกลเหล่านี้คือ Wake Lock ระดับเคอร์เนล เนื่องจาก Wake Lock ของเคอร์เนลไม่ได้มาจากแอป จึงไม่มีชื่อ Wake Lock ที่เกี่ยวข้องที่จะแสดงที่นี่
คำแนะนำ
- หากประมวลผลเหตุการณ์เครือข่ายในฝั่งเซิร์ฟเวอร์ได้ ให้ใช้ FCM เพื่อรับข้อมูลในฝั่งไคลเอ็นต์ คุณอาจเลือกกำหนดเวลาผู้ปฏิบัติงานแบบเร่งด่วนหากจำเป็นต้องประมวลผลข้อมูล FCM เพิ่มเติม
- หากต้องประมวลผลเหตุการณ์ฝั่งไคลเอ็นต์โดยใช้การเชื่อมต่อซ็อกเก็ต ก็ไม่จำเป็นต้องใช้ Wake Lock เพื่อฟังการขัดจังหวะเหตุการณ์ เมื่อกลุ่มข้อมูลมาถึง Wi-Fi หรือสัญญาณโทรศัพท์มือถือ ฮาร์ดแวร์สัญญาณจะทริกเกอร์การขัดจังหวะในรูปแบบของ Wake Lock ระดับเคอร์เนล จากนั้นคุณอาจเลือกกำหนดเวลาให้ผู้ปฏิบัติงานหรือรับ Wake Lock เพื่อประมวลผลข้อมูล
- เช่น หากคุณใช้
ktor-networkเพื่อรอรับกลุ่มข้อมูลบนซ็อกเก็ตเครือข่าย คุณควรรับ Wake Lock เมื่อมีการส่งกลุ่มข้อมูลไปยังไคลเอ็นต์แล้วเท่านั้น
WorkManager
ผู้ปฏิบัติงาน WorkManager จะได้รับ Wake Lock ขณะทำงานในเบื้องหลัง Wake Lock จะมาจากแอปที่สร้างผู้ปฏิบัติงาน
ชื่อ Wake Lock
ชื่อ Wake Lock ที่ WorkManager ได้รับจะขึ้นอยู่กับเวอร์ชันของระบบ Android ที่ใช้งานอยู่
Android 15 และต่ำกว่า
งาน WorkManager จะสร้าง Wake Lock ที่มีชื่อตามรูปแบบต่อไปนี้
*job*/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
Android 16 QPR2 ขึ้นไป
งานที่เร่งด่วนจะสร้าง Wake Lock ที่มีชื่อตามรูปแบบต่อไปนี้
*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 หรือต่ำกว่า Wake Lock จะมีชื่อดังนี้
*job*/com.example.app/androidx.work.impl.background.systemjob.SystemJobService
ในอุปกรณ์ที่ใช้ Android 16 QPR2 ขึ้นไปและใช้ WorkManager 2.10.0+
Wake Lock จะมีชื่อดังนี้
*job*e/#BackupFileWorker#/com.example.app/androidx.work.impl.background.systemjob.SystemJobService
คำแนะนำ
- อัปเกรดเวอร์ชัน WorkManager เป็นเวอร์ชันเสถียรล่าสุดเพื่อให้แท็ก Wake Lock มีรายละเอียดมากขึ้นใน Android 16 QPR2 ขึ้นไป
- ตรวจสอบการใช้งาน WorkManager Worker โดยเฉพาะอย่างยิ่ง ให้ตรวจสอบว่าเป็นไปตามคำแนะนำของเราเกี่ยวกับการเพิ่มประสิทธิภาพการใช้แบตเตอรี่สำหรับ API การกำหนดเวลางาน
หากต้องการทำให้แท็ก Wake Lock มีรายละเอียดมากขึ้นใน Android 16 QPR2 ขึ้นไป ให้ใช้เมธอด
setTraceTagใน Worker เพื่อเพิ่มข้อมูลการแก้ไขข้อบกพร่องเพิ่มเติม เช่น คลาสที่กำหนดเวลา Worker - หากคุณระบุ Wake Lock ที่สร้างโดย WorkManager ที่มีการใช้งาน Wake Lock สูง อาจเป็นเพราะคุณกำหนดค่าผู้ปฏิบัติงานไม่ถูกต้องให้ทำงานไม่เสร็จในบางสถานการณ์ ลองวิเคราะห์สาเหตุที่ผู้ปฏิบัติงานหยุดทำงาน โดยเฉพาะอย่างยิ่งหากคุณเห็น
STOP_REASON_TIMEOUTเกิดขึ้นบ่อยครั้ง - นอกจากการบันทึกสาเหตุที่ Worker หยุดทำงานแล้ว โปรดดูเอกสารประกอบเกี่ยวกับการแก้ไขข้อบกพร่องของ Worker นอกจากนี้ ให้พิจารณารวบรวมและวิเคราะห์การติดตามของระบบเพื่อทำความเข้าใจว่ามีการรับและปล่อย Wake Lock เมื่อใด
_UNKNOWN
หากเครื่องมือแก้ไขข้อบกพร่องคิดว่าชื่อ Wake Lock มีข้อมูลส่วนบุคคลที่ระบุตัวบุคคลนั้นได้ (PII) เครื่องมือจะไม่แสดงชื่อ Wake Lock จริง แต่จะติดป้ายกำกับ Wake Lock เป็น _UNKNOWN แทน ตัวอย่างเช่น เครื่องมืออาจทำเช่นนี้หากชื่อ Wake Lock มีอีเมล
คำแนะนำ
ทำตามแนวทางปฏิบัติแนะนำในการตั้งชื่อ Wake Lock และหลีกเลี่ยงการใช้ PII ในชื่อ Wake Lock หากพบ Wake Lock ชื่อ _UNKNOWN ที่มาจากแอปของคุณ ให้ลองระบุว่าเป็น Wake Lock ใดและตั้งชื่ออื่น