我遇到了
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);
当闹钟响起时,它会触发我的RecieverHandler类,特别是这个函数: –
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);
这会为下一条消息创建警报.
我已经在很短的时间内对它进行了测试,它似乎可以正常工作,并通过更改手机中的日期和时间对其进行了大量测试.它似乎成功发射.
然后,当此警报响起时,它将获得下一个警报,并安排此计划.我几乎100%确定这些部件工作正常.
所以我只关注为什么它不起作用的一些理论.
我认为这可能与我断开手机与调试器的连接有关,但在这种情况下,警报似乎可以在很短的时间内完成.
所以我的主要理论是我创建的闹钟管理员在一段时间后被删除了?如果这是真的,那么这是一个很大的问题,因为无论经过了多长时间,我都需要这样做.
非常感谢任何有助于确保我的警报的帮助,谢谢.
最佳答案
So my main theory is that the alarmmanager I am creating is being deleted after a certain amount of time?
注册的警报会一直注册,直到您取消它们,或者直到下次重新启动,或直到用户在Android 2.1及更早版本中使用“任务杀手”杀死您的应用程序.
你没有说明:
>你如何确定警报是否“熄火”
> BroadcastReceiver正在做什么
没有这些信息,就不可能说出错的地方.
确保您在BroadcastReceiver中完成所有工作(如果工作非常快)或者在将控制权传递给正在完成其余工作的IntentService时维护自己的WakeLock.查看WakefulIntentService
以获取更多信息.
此外,您可能尝试为每个警报创建唯一的Intent,而不是更新当前警报.我不知道这里有一个特别的问题,但它让我感到紧张.