Wakeup เป็นกลไกใน API ของ AlarmManager ที่ช่วยให้นักพัฒนาแอปตั้งสัญญาณปลุกเพื่อให้อุปกรณ์ปลุกระบบในเวลาที่กำหนดได้ แอปของคุณ
ตั้งนาฬิกาปลุกโดยเรียกใช้เมธอด set() ใดเมธอดหนึ่งใน
AlarmManager ด้วย
แฟล็ก
RTC_WAKEUP
หรือ
ELAPSED_REALTIME_WAKEUP เมื่อมีการทริกเกอร์นาฬิกาปลุกเพื่อปลุก อุปกรณ์จะออกจากโหมดประหยัดพลังงาน
และจะถือWake Lock บางส่วนขณะเรียกใช้เมธอด
onReceive()
หรือ
onAlarm()
ของนาฬิกาปลุก หากมีการปลุกระบบมากเกินไป อาจทำให้แบตเตอรี่ของอุปกรณ์หมดเร็วได้
หากแอปปลุกอุปกรณ์มากเกินไป คุณสามารถใช้คำแนะนำในหน้านี้เพื่อวินิจฉัยและแก้ไขปัญหาได้
แก้ไขปัญหา
AlarmManager ได้รับการเปิดตัวในแพลตฟอร์ม Android เวอร์ชันแรกๆ แต่เมื่อเวลาผ่านไป กรณีการใช้งานหลายอย่างที่ก่อนหน้านี้ต้องใช้ AlarmManager ตอนนี้ใช้ฟีเจอร์ใหม่ๆ เช่น WorkManager ได้ดีกว่า
ส่วนนี้มีเคล็ดลับในการลดการปลุกด้วยการตั้งปลุก แต่ในระยะยาว
ให้พิจารณาการย้ายข้อมูลแอปเพื่อให้เป็นไปตามคำแนะนำในส่วนแนวทางปฏิบัติ
แนะนำ
ระบุตำแหน่งในแอปที่คุณตั้งเวลาปลุกและลดความถี่ที่การปลุกเหล่านั้นจะทริกเกอร์ โดยมีเคล็ดลับดังนี้
มองหาการเรียกใช้เมธอดต่างๆ ของ
set()ในAlarmManagerที่มี ทั้งRTC_WAKEUPหรือELAPSED_REALTIME_WAKEUPเราขอแนะนำให้ใส่ชื่อแพ็กเกจ คลาส หรือเมธอดในแท็ก ชื่อของสัญญาณเตือนเพื่อให้คุณระบุตำแหน่งในแหล่งที่มาที่ ตั้งสัญญาณเตือนได้ง่าย เคล็ดลับเพิ่มเติมมีดังนี้
- อย่าใส่ข้อมูลที่ระบุตัวบุคคลได้ (PII) ในชื่อ เช่น
อีเมล มิเช่นนั้น อุปกรณ์จะบันทึก
_UNKNOWNแทนชื่อการปลุก - อย่ารับชื่อคลาสหรือชื่อเมธอดโดยใช้โปรแกรม เช่น โดยการเรียกใช้
getName()เนื่องจาก Proguard อาจทำให้ชื่อเหล่านั้นอ่านไม่ออก ให้ใช้สตริงที่ฮาร์ดโค้ดแทน - อย่าเพิ่มตัวนับหรือตัวระบุที่ไม่ซ้ำกันลงในแท็กการแจ้งเตือน ระบบจะรวบรวมการปลุกที่ตั้งค่าด้วยวิธีดังกล่าวไม่ได้เนื่องจากแต่ละรายการมีตัวระบุที่ไม่ซ้ำกัน
- อย่าใส่ข้อมูลที่ระบุตัวบุคคลได้ (PII) ในชื่อ เช่น
อีเมล มิเช่นนั้น อุปกรณ์จะบันทึก
หลังจากแก้ไขปัญหาแล้ว ให้ตรวจสอบว่าการปลุกระบบทำงานตามที่คาดไว้โดยเรียกใช้คำสั่ง adb ต่อไปนี้
adb shell dumpsys alarm
คำสั่งนี้ให้ข้อมูลเกี่ยวกับสถานะของบริการของระบบเตือนภัยในอุปกรณ์ ดูข้อมูลเพิ่มเติมได้ที่ dumpsys
แนวทางปฏิบัติแนะนำ
ใช้การปลุกระบบเฉพาะในกรณีที่แอปต้องดำเนินการที่แสดงต่อผู้ใช้ (เช่น โพสต์การแจ้งเตือนหรือแจ้งเตือนผู้ใช้) ดูรายการแนวทางปฏิบัติแนะนำสำหรับ AlarmManager ได้ที่การตั้งเวลา การปลุก
อย่าใช้
AlarmManager เพื่อ
ตั้งเวลางานที่ทำงานอยู่เบื้องหลัง โดยเฉพาะงานที่ทำงานอยู่เบื้องหลังที่ทำซ้ำหรือเครือข่าย ใช้ WorkManager
เพื่อกำหนดเวลางานในเบื้องหลังเนื่องจากมีข้อดีดังต่อไปนี้
- การจัดกลุ่ม - รวมงานต่างๆ เพื่อลดการใช้แบตเตอรี่
- ความคงทน - หากอุปกรณ์รีบูต งาน WorkManager ที่กำหนดเวลาไว้จะทำงานหลังจากรีบูตเสร็จสิ้น
- เกณฑ์ - งานจะทำงานตามเงื่อนไขได้ เช่น อุปกรณ์ กำลังชาร์จหรือมี Wi-Fi หรือไม่
ดูข้อมูลเพิ่มเติมได้ที่คำแนะนำเกี่ยวกับการประมวลผลในเบื้องหลัง
อย่าใช้ AlarmManager
เพื่อกำหนดเวลาการดำเนินการที่ใช้ได้เฉพาะขณะที่แอปกำลังทำงานอยู่ (กล่าวคือ
ควรยกเลิกการดำเนินการกำหนดเวลาเมื่อผู้ใช้ออกจากแอป) ในกรณีดังกล่าว ให้ใช้คลาส
Handler เนื่องจาก
ใช้งานง่ายและมีประสิทธิภาพมากกว่า
แนะนำสำหรับคุณ
- หมายเหตุ: ข้อความลิงก์จะแสดงเมื่อ JavaScript ปิดอยู่
- Wake Lock แบบต่อเนื่องบางส่วน
- ANR