2014-09-24 56 views
1

最近,在我的计时器应用程序中,第一次运行计时器会导致它在大约两或三秒后发出警报。奇怪的是,它只是在我通过Android Studio安装应用程序后第一次运行计时器。每次之后,它都按预期运行,定时器在预期时间后熄灭。为什么AlarmManager警报首次运行延迟?

下面是相关代码:

 if(LOG) Log.v(TAG,"Starting the timer service: "+ TimerUtils.time2humanStr(context, mTime)); 

     Intent intent = new Intent(this, TimerReceiver.class); 
     mPendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
     mAlarmMgr.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + mTime, mPendingIntent); 

变量mTime正确每次设置,根据logcat的输出:

Starting the timer service: 5 seconds 

它最初的运行之后每次工作正常。它以前工作正常;它可能是Android或Android Studio的问题吗?或者我需要初始化一些东西?我知道,如果不将所有的代码都抛弃在这里,我不能期望得到精确的答案,我只是在寻找提示(猜测?),为什么会发生这种行为。

回答

1

你使用API​​ 19吗?看看本说明文档中:

注:API 19年初,通过这种方法触发时间是 为不精确处理:报警不会在此时间之前送达, 但可推迟和一段时间后交付。操作系统将使用此策略,以便在整个系统中“批量”报警,最大限度地减少设备“唤醒”的次数,并最大限度地减少电池的使用。一般而言,与未来计划中的警报不会被延迟,只要计划在将来 附近的警报不会延迟。

来源:AlarmManager

+1

如果是这样的话,为什么会只发生第一次?我试过使用'setExact()',它不会改变。尽管如此,我意识到我对时间错了。它不是双倍的,它只是延迟了几秒钟。 – yuttadhammo 2014-09-24 18:34:18

+0

我认为这是修改文档以反映行为的一种情况。我注意到OP早在API 19之前就描述了什么。 – 2014-09-24 18:41:13