2014-01-07 80 views
0

是否有人可以解釋爲什麼下面的代碼工作(用20秒的延遲,即第一個報警的火災。)(即第一個火警瞬間)報警的setRepeating第一觸發問題

Calendar cal = Calendar.getInstance(); 
cal.add (Calendar.SECOND,20); 
am = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE); 
am.setRepeating(AlarmManager.RTC, cal.getTimeInMillis(), 20000, PendingIntent pi); 

,而下面是不是:

am = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE); 
am.setRepeating(AlarmManager.RTC, SystemClock.elapsedRealtime() + 20000, 20000, PendingIntent pi); 

回答

0

SystemClock.elapsedRealtime() [1]返回自啓動以來的毫秒數。

cal.getTimeInMillis() [2]返回從UNIX Epoch(1970/01/01)開始的毫秒數...根據您的代碼。

第一個代碼塊實際上是在將來安排20秒的警報。

第二個代碼塊實際上調度了遙遠的過去的警報(除非您在1970年1月1日啓動手機!),並且警報運行的時間已經過去了。警報還沒有運行,所以它現在運行它,它已經過去了。

[1] http://developer.android.com/reference/android/os/SystemClock.html#elapsedRealtime()

[2] http://developer.android.com/reference/java/util/Calendar.html#getTimeInMillis()