1
    GregorianCalendar cal = new GregorianCalendar();
    cal.set(GregorianCalendar.HOUR_OF_DAY, 10);
    cal.set(GregorianCalendar.MINUTE, 12);
    cal.set(GregorianCalendar.SECOND, 0);
    cal.set(GregorianCalendar.MILLISECOND, 0);
    if(cal.before(new GregorianCalendar())){
        cal.add(GregorianCalendar.DAY_OF_MONTH, 1);
    }       

    myalarm = (AlarmManager)getSystemService(ALARM_SERVICE);

    Intent mainIntent = new Intent(this, myReceiver.class);         
    pIntent = PendingIntent.getBroadcast(this, 0, mainIntent, 0);

    myalarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 1000*60*60*24, pIntent);

这是设置警报的代码。myReceiver 是一个扩展的 BroadcastReceiver 启动一个服务,它将触发一个通知......每天(从警报设置中可以看到)。

我要了,因为:

1)当我启动我的应用程序并且警报过期时,如果我将我的应用程序从最近的应用程序列表中滑出,则不会发生任何奇怪的事情。在模拟器进程列表中设备选项卡上的 DDMS 面板中,我的应用程序消失了。<---- 这就是我应该总是发生的事情

但....

2)当我开始我的应用程序并且警报还没有过期,所以通知还没有发送,我等待直到警报响起并且我收到通知

然后....

当我在 6 到 30 秒后将我的应用程序从最近的应用程序列表中滑出时,通知再次出现,并且在模拟器进程列表的设备选项卡上的 DDMS 面板中,我的应用程序再次出现。如果我点击它,我的应用程序的主要活动就会启动。

我可以永远重现这种行为,直到......

3)我没有点击它就刷出通知。此时不再发送通知但在模拟器进程列表中设备选项卡上的 DDMS 面板中我的应用程序仍然存在,因为刷出通知不会杀死应用程序但在最近的应用程序列表中我的应用程序不是' t 现在。

为什么????怎么了?

附加信息:使用 Log 我发现即使应用程序不再出现在最近的应用程序列表中,我的 BroadcastReceiver 类中的 onReceive 方法也会被调用。

4

0 回答 0