我使用了AlarmManager來設置時間並期望在將來做一些工作。幾乎情況下它工作正常,沒有問題。但有時(有時候),警報未被解僱。這個問題難以重現,我仍然不知道原因。 我在幾個操作系統版本中遇到過這個問題:4.4,5.1,6.0,6.1,7.0。AlarmManager不穩定
我已經使用WakefulBroadcastReceiver開始與Wakelock服務,但問題仍然存在。
以下是我的安排鬧鐘的代碼。
Intent alarmIntent = new Intent(context, AlarmReceiver.class);
alarmIntent.putExtra("todo_id", myTodo.getId());
alarmIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, myTodo.getId(), alarmIntent, PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
AlarmManager.AlarmClockInfo alarmClockInfo = new AlarmManager.AlarmClockInfo(calendar.getTimeInMillis(), pendingIntent);
alarmManager.setAlarmClock(alarmClockInfo, pendingIntent);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
} else {
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
}
public class AlarmReceiver extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
LogUtil.debug("onReceive()");
if (null != intent.getExtras()) {
int id = intent.getIntExtra("todo_id", -1);
if (id != -1) {
Intent myIntent = new Intent(context, AlarmService.class);
myIntent.putExtra("todo_id", id);
LogUtil.debug("Receiver receive todo id: "+id);
startWakefulService(context, myIntent);
}
}
}
}
public class AlarmService extends Service {
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
LogUtil.debug("Service onStartCommand");
int id = intent.getIntExtra("todo_id", -1);
LogUtil.debug("Service receive todo id: " + id);
// do some stuff here
AlarmReceiver.completeWakefulIntent(intent);
return START_REDELIVER_INTENT;
}
有沒有人有像我這樣的問題?你的解決方案是什麼? 也許這個問題來自Android SDK,他們讓AlarmManager工作不穩定。
在6.0上試過它得到了同樣的問題,但效果很好沒有7.0 – Akshay
我認爲一些ID爲-1爲你的情況 – Mike
@Mike,你能告訴我更多的細節爲什麼一些ID爲-1? – CauCuKien