我对Android的AlarmManager功能有问题。
问题是,超过一个小时左右等待的警报没有响。
我的应用程序最初会创建一个这样的警报:
PendingIntent sender = PendingIntent.getBroadcast(this, 192837, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, mCal.getTimeInMillis(), sender);
当警报关闭时,它会触发我的receiverhandler类,特别是这个函数:
public void onReceive(Context context, Intent intent)
{
try {
Bundle bundle = intent.getExtras();
Intent newIntent = new Intent(context, MessageDispatcher.class);
newIntent.putExtras(bundle);
// newIntent.addFlags(Intent.FLAG);
context.startService(newIntent);
} catch (Exception e) {
Toast.makeText(context, "There was an error somewhere, but we still received an alarm", Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
}
然后,这将启动一个名为MessageDispatcher的服务,并调用此函数:
public int onStartCommand(Intent intent, int flags, int startId)
这个函数从我的数据库中获取下一个报警时间,我确信它工作正常,然后根据数据库中的日期设置一个新的报警,如下所示:
PendingIntent sender = PendingIntent.getBroadcast(this, 192837, newIntent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, mCal.getSendAt().getTimeInMillis(), sender);
这将为下一条消息创建警报。
我已经测试了很短的时间,它似乎工作,并测试了大量的时间,通过改变我的日期和时间内的电话。它似乎发射成功。
然后当这个警报响起时,它会让下一个警报响起并安排这个时间。我几乎百分之百确定这些部件工作正常。
所以我只能用一些理论来解释为什么它不起作用。
我认为这可能与我断开手机与调试器的连接有关,但在这种情况下,警报似乎会在短时间内起作用。
所以我的主要理论是,我创建的AlarmManager在一定时间后会被删除?如果这是真的这是一个大问题,因为我需要这是工作,无论多少时间过去了。
非常感谢您帮助我保持警惕,谢谢。
最佳答案
所以我的主要理论是,我创建的AlarmManager在一定时间后会被删除?
注册的警报将一直保持注册状态,直到您取消它们,或者直到下一次重新启动,或者直到用户在Android2.1和更早版本上使用“任务杀手”杀死您的应用程序。
你没有指出:
你如何判断警报是否“响了”BroadcastReceiver
正在做什么
没有这些信息,就不可能说出你的错误所在。
确保您在BroadcastReceiver
中执行所有工作(如果工作很快),或者在将控制权交给正在执行其余工作的WakeLock
时维护自己的IntentService
。查看WakefulIntentService
了解更多信息。
此外,您可能会尝试为每个警报创建唯一的Intents
,而不是更新当前警报。我不知道这里有什么特别的问题,但这让我很紧张。
关于android - Android alarmmanager不是很可靠,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4828324/