2013-08-04 55 views
1
myTimer.scheduleAtFixedRate(timerTaskForListChecker, 0L, timerInterval*1000); 

上述行「有時」不知何故引發以下異常:在我的延遲參數在TimerTask的延遲參數相關的奇怪拋出:IllegalArgumentException,安卓

Caused by: java.lang.IllegalArgumentException: Illegal delay to start the TimerTask: -1543808998843 
    at java.util.Timer.scheduleImpl(Timer.java:567) 
    at java.util.Timer.scheduleAtFixedRate(Timer.java:528) 
    ... 

正如你看到的,我有「0」(後來我嘗試將其更改爲0L但它不起作用)

它如何將值「0」看作「-1543808998843」?

更新1:

我有以下行,我從來沒有改變一個時間間隔變量。

private int timerInterval = 3 * 60; 

更新2: 我發現,產生此異常的系統,還返回一個負數(溢出?)以下行:

(int)((double)System.currentTimeMillis()/1000L) 

它可以與定製Android操作系統? (由公司 - 設備特定 - 出廠默認設置)

回答

2

問題很可能是period參數錯誤。而在這種情況下意外負數的最可能原因是整數溢出。

我的猜測是,你聲明timerIntervalint和「有時」你嘗試了幾百萬秒延時......


你說,這將返回一些負數平臺:

(int)((double)System.currentTimeMillis()/1000L) 

這是奇怪!它可能是該平臺的Android端口中的一個錯誤,或者系統時鐘被設置爲不正確的值。

currentTimeMillis的值爲假設爲自1970年1月1日以來的毫秒數......爲64位有符號值。我不知道如何從上面的表達式中獲得負數,除非currentTimeMillis()正在返回假值負值。

可能相關:

+0

我現在檢查了,我只有這一行:「private int timerInterval = 3 * 60;」我從不改變它。 – frankish

+0

我建議您在拋出異常時修改代碼以打印出參數的實際值......或者用調試器檢查它們。 –

+0

問題是我沒有得到這個異常,但「一些」用戶得到它。我從遠程異常日誌中看到這些。請參閱我的問題中的update-2;它可以幫助嗎? – frankish

1

我知道這是一個老問題,但如果任何人有類似的問題。

我有這個完全相同的問題,我已經意識到設備上的日期某種程度上重設爲1920年。改變它回來解決了這個問題。