【发布时间】:2015-05-09 12:21:09
【问题描述】:
我使用 AlarmManager 来安排重复的后台任务。当触发警报时,Android 系统会广播一个 Pending Intent。接收器类只是重复显示一个 toast,每 10 秒一次。我在 startAlarm 方法中创建了意图,并在 cancelAlarm 方法中取消。 我的问题是:当我在创建警报后关闭应用程序时,吐司不断显示,当我重新打开应用程序时,我失去了对创建后台任务的对象的控制,所以我无法取消它。帮忙?
以下是控制警报的方法:
public void startAlarm(Context context)
{
ser=(AlarmManager)context.getSystemService(context.ALARM_SERVICE);
Intent serviceIntent = new Intent(context, AlarmReceiver.class);
pi=PendingIntent.getBroadcast(context, 0, serviceIntent, PendingIntent.FLAG_CANCEL_CURRENT);
Calendar cal=Calendar.getInstance();
cal.add(Calendar.SECOND, 10);
ser.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), REPEAT_TIME, pi);
}
public void cancelAlarm(Context context)
{
if (ser != null)
{
ser.cancel(pi);
ser=null;
Toast.makeText(context, "Alarm Canceled", Toast.LENGTH_SHORT).show();
}
}
这里是警报的接收器类:
public class AlarmReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context arg0, Intent arg1)
{
Toast.makeText(arg0, "I'm running", Toast.LENGTH_SHORT).show();
}
}
【问题讨论】:
-
“我失去了对创建后台任务的对象的控制,所以我无法取消它”是什么意思?你到底想要什么?
标签: android alarmmanager background-process