การปลุกระบบเป็นกลไกใน
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 โปรดใช้สตริงฮาร์ดโค้ดแทน - อย่าเพิ่มตัวนับหรือตัวระบุที่ไม่ซ้ำกันลงในแท็กการปลุก ระบบจะไม่ดำเนินการต่อไปนี้ จะสามารถรวบรวมการตั้งปลุกในลักษณะดังกล่าว เพราะทุกคนต่างมี ตัวระบุที่ไม่ซ้ำกัน
- อย่าใส่ข้อมูลส่วนบุคคลที่ระบุตัวบุคคลนั้นได้ (PII) ไว้ในชื่อ เช่น
ที่อยู่อีเมล ไม่เช่นนั้น อุปกรณ์จะบันทึก
หลังจากแก้ปัญหาแล้ว ให้ตรวจสอบว่าการปลุกด้วยนาฬิกาปลุกทำงานตาม โดยการเรียกใช้ ADB ต่อไปนี้ คำสั่ง:
adb shell dumpsys alarm
คำสั่งนี้จะให้ข้อมูลเกี่ยวกับสถานะของบริการระบบสัญญาณเตือน ในอุปกรณ์ สำหรับข้อมูลเพิ่มเติม โปรดดู dumpsys
แนวทางปฏิบัติแนะนำ
ใช้การปลุกระบบเฉพาะเมื่อแอปของคุณต้องทำงานที่แสดงต่อผู้ใช้เท่านั้น (เช่น การโพสต์การแจ้งเตือนหรือการแจ้งเตือนผู้ใช้) สำหรับรายการ แนวทางปฏิบัติแนะนำสำหรับ Alarm Manager โปรดดูที่การตั้งเวลา การปลุก
ไม่ใช้
AlarmManager
ถึง
กำหนดเวลางานในเบื้องหลัง โดยเฉพาะงานที่ทำซ้ำหรืองานเบื้องหลังของเครือข่าย ใช้
WorkManager
ตั้งเวลางานในเบื้องหลังได้ เนื่องจากมีประโยชน์ดังต่อไปนี้
- การทำงานแบบกลุ่ม - รวมงานเข้าด้วยกันเพื่อให้ใช้แบตเตอรี่ลดลง
- การคงอยู่ - หากอุปกรณ์รีบูต งาน WorkManager ที่กำหนดเวลาไว้ ทำงานหลังจากการรีบูตเสร็จสิ้น
- เกณฑ์ - งานสามารถทำงานได้ตามเงื่อนไข เช่น ระบุว่าอุปกรณ์หรือไม่ กำลังชาร์จอยู่หรือ Wi-Fi พร้อมใช้งาน
ดูข้อมูลเพิ่มเติมได้ที่คำแนะนำเกี่ยวกับการประมวลผลในเบื้องหลัง
ไม่ใช้ AlarmManager
เพื่อกำหนดเวลาการดำเนินการซึ่งจะใช้ได้ก็ต่อเมื่อแอปทำงานอยู่ (ใน
กล่าวคือ การดำเนินการการจับเวลาควรถูกยกเลิกเมื่อผู้ใช้ออกจาก
แอป) ในสถานการณ์เหล่านั้น ให้ใช้
Handler
เนื่องจาก
ใช้งานง่ายและมีประสิทธิภาพมากขึ้น
แนะนำสำหรับคุณ
- หมายเหตุ: ข้อความลิงก์จะแสดงเมื่อ JavaScript ปิดอยู่
- Wake Lock แบบต่อเนื่องบางส่วน
- ANR