靜態註冊 BroadcastReceiver + AlarmManager.setExact,App 被工作管理器/清理大師殺掉後,鬧鐘時間到不觸發。
PendingIntent、清除 AlarmManager 設定。setExactAndAllowWhileIdle / setAlarmClock(API 19+/21+)提高優先級。BootCompletedReceiver 中重新註冊所有鬧鐘,確保重啟後恢復。
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent intent = new Intent(this, MyReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_IMMUTABLE);
if (Build.VERSION.SDK_INT >= 23) {
am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, triggerTime, pi);
} else if (Build.VERSION.SDK_INT >= 19) {
am.setExact(AlarmManager.RTC_WAKEUP, triggerTime, pi);
} else {
am.set(AlarmManager.RTC_WAKEUP, triggerTime, pi);
}