2014-09-24 21 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