ปลุกระบบบ่อยเกินไป

การปลุกระบบเป็นกลไกใน AlarmManager API ที่ อนุญาตให้นักพัฒนาแอปตั้งปลุกเพื่อปลุกระบบของอุปกรณ์ในเวลาที่ระบุ แอปของคุณ ตั้งปลุกโดยโทรหาหนึ่งในวิธี set() ใน AlarmManager ด้วย อย่างใดอย่างหนึ่ง RTC_WAKEUP หรือ ELAPSED_REALTIME_WAKEUP แจ้ง เมื่อมีการปลุกให้ตื่นนอน อุปกรณ์จะออกจากโหมดพลังงานต่ำ และมีการเปิดล็อกบางส่วนไว้ในขณะที่เรียกใช้ onReceive() หรือ onAlarm() หากการปลุกระบบทำงานมากเกินไป อาจทำให้อุปกรณ์หมดเปลือก แบตเตอรี่

Android จะตรวจสอบแอปโดยอัตโนมัติเพื่อหา การปลุกระบบบ่อยเกินไปและแสดงข้อมูลใน Android Vitals สำหรับ เกี่ยวกับวิธีรวบรวมข้อมูลได้ที่ Play Console เอกสาร

หากแอปปลุกอุปกรณ์มากเกินไป คุณสามารถใช้คำแนะนำใน หน้านี้เพื่อวิเคราะห์และแก้ไขปัญหา

แก้ไขปัญหา

AlarmManager เดิมคือ เปิดตัวบนแพลตฟอร์ม Android เวอร์ชันแรกๆ แต่เมื่อเวลาผ่านไป กรณีที่ก่อนหน้านี้ต้องใช้ AlarmManager เปลี่ยนเป็น ที่ให้บริการได้ดียิ่งขึ้นด้วยฟีเจอร์ใหม่ๆ เช่น WorkManager ส่วนนี้ประกอบด้วยเคล็ดลับสำหรับการลดการปลุกระบบ แต่ในระยะยาว ให้ลองย้ายแอปของคุณตามคำแนะนำในหัวข้อ แนวทางปฏิบัติแนะนำ

ระบุตำแหน่งในแอปที่คุณตั้งเวลาปลุกให้ตื่นนอนและลด ความถี่ที่การปลุกนั้นเกิดขึ้น โดยมีเคล็ดลับดังนี้

  • มองหาการโทรไปยัง set() ใน AlarmManager ที่ รวมถึง RTC_WAKEUP หรือ ELAPSED_REALTIME_WAKEUP แจ้ง

  • เราขอแนะนำให้ใส่ชื่อแพ็กเกจ คลาส หรือชื่อวิธีการในแท็กการปลุก เพื่อระบุตำแหน่งในแหล่งข้อมูลที่มี ตั้งนาฬิกาปลุกแล้ว เคล็ดลับเพิ่มเติมมีดังนี้

    • อย่าใส่ข้อมูลส่วนบุคคลที่ระบุตัวบุคคลนั้นได้ (PII) ไว้ในชื่อ เช่น ที่อยู่อีเมล ไม่เช่นนั้น อุปกรณ์จะบันทึก _UNKNOWN แทนการปลุก ชื่อ
    • ไม่ได้รับชื่อคลาสหรือเมธอดแบบเป็นโปรแกรม เช่น ด้วยการเรียก getName() เนื่องจาก อาจถูกสร้างความสับสนโดย Proguard โปรดใช้สตริงฮาร์ดโค้ดแทน
    • อย่าเพิ่มตัวนับหรือตัวระบุที่ไม่ซ้ำกันลงในแท็กการปลุก ระบบจะไม่ดำเนินการต่อไปนี้ จะสามารถรวบรวมการตั้งปลุกในลักษณะดังกล่าว เพราะทุกคนต่างมี ตัวระบุที่ไม่ซ้ำกัน

หลังจากแก้ปัญหาแล้ว ให้ตรวจสอบว่าการปลุกด้วยนาฬิกาปลุกทำงานตาม โดยการเรียกใช้ ADB ต่อไปนี้ คำสั่ง:

adb shell dumpsys alarm

คำสั่งนี้จะให้ข้อมูลเกี่ยวกับสถานะของบริการระบบสัญญาณเตือน ในอุปกรณ์ สำหรับข้อมูลเพิ่มเติม โปรดดู dumpsys

แนวทางปฏิบัติแนะนำ

ใช้การปลุกระบบเฉพาะเมื่อแอปของคุณต้องทำงานที่แสดงต่อผู้ใช้เท่านั้น (เช่น การโพสต์การแจ้งเตือนหรือการแจ้งเตือนผู้ใช้) สำหรับรายการ แนวทางปฏิบัติแนะนำสำหรับ Alarm Manager โปรดดูที่การตั้งเวลา การปลุก

ไม่ใช้ AlarmManager ถึง กำหนดเวลางานในเบื้องหลัง โดยเฉพาะงานที่ทำซ้ำหรืองานเบื้องหลังของเครือข่าย ใช้ WorkManager ตั้งเวลางานในเบื้องหลังได้ เนื่องจากมีประโยชน์ดังต่อไปนี้

  • การทำงานแบบกลุ่ม - รวมงานเข้าด้วยกันเพื่อให้ใช้แบตเตอรี่ลดลง
  • การคงอยู่ - หากอุปกรณ์รีบูต งาน WorkManager ที่กำหนดเวลาไว้ ทำงานหลังจากการรีบูตเสร็จสิ้น
  • เกณฑ์ - งานสามารถทำงานได้ตามเงื่อนไข เช่น ระบุว่าอุปกรณ์หรือไม่ กำลังชาร์จอยู่หรือ Wi-Fi พร้อมใช้งาน

ดูข้อมูลเพิ่มเติมได้ที่คำแนะนำเกี่ยวกับการประมวลผลในเบื้องหลัง

ไม่ใช้ AlarmManager เพื่อกำหนดเวลาการดำเนินการซึ่งจะใช้ได้ก็ต่อเมื่อแอปทำงานอยู่ (ใน กล่าวคือ การดำเนินการการจับเวลาควรถูกยกเลิกเมื่อผู้ใช้ออกจาก แอป) ในสถานการณ์เหล่านั้น ให้ใช้ Handler เนื่องจาก ใช้งานง่ายและมีประสิทธิภาพมากขึ้น