我正在制作一个使用 AlarmManager.setInexactRepeating() 方法的应用程序,它将 PendingIntent 作为参数。
我通过调用我的 setAlarm() 方法开始
public void setRepeatingAlarm() {
Intent intent = new Intent(this, AlarmReceiver.class);
String url = getAssembledUrl();
intent.putExtra("url", url);
pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent);
}
并通过 stopAlarm() 停止它
private void stopRepeatingAlarm() {
alarmManager.cancel(pendingIntent);
pendingIntent.cancel();
}
工作得很好。但是,当活动被破坏并且用户决定停止警报时,显然未决意图为空,因为它是在当前活动生命周期中未调用的 setRepeatingAlarm() 方法中创建的。
解决这个问题的正确方法是什么?
我可以在 Activity.onCreate() 中创建挂起的意图,这将解决这个问题,但是我将无法再次启动警报,因为挂起的意图被取消并且需要再次重新创建(我认为,除非有一种检查意图的方法被取消了,我不知道)