为什么第一次运行时AlarmManager报警会延迟?

时间:2014-09-24 17:25:28

标签: android alarmmanager

最近,在我的计时器应用程序中,第一次运行计时器会导致它在应该大约两三秒钟后发出警报。奇怪的是,它只是在我通过Android Studio安装应用程序后第一次运行计时器时才这样做。每次之后,它都按预期运行,计时器在预期时间后关闭。

以下是相关代码:

        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);

每次都根据logcat输出正确设置变量mTime

Starting the timer service: 5 seconds

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

1 个答案:

答案 0 :(得分:1)

您使用的是API 19吗?请查看文档中的注释:

  

注意:从API 19开始,传递给此方法的触发时间是   被视为不精确:在此时间之前不会发出警报,   但可能会推迟并在一段时间后交付。操作系统将使用   这个政策是为了批量"整个报警   系统,最大限度地减少设备需要唤醒的次数"   并尽量减少电池使用。一般来说,警报安排在附近   只要警报安排在远期,将来不会推迟   将来

来源:AlarmManager