奇怪的IllegalArgumentException与TimerTask,Android中的delay参数有关

时间:2013-08-04 06:09:18

标签: java android timertask

myTimer.scheduleAtFixedRate(timerTaskForListChecker, 0L, timerInterval*1000);

上面的行“有时”会以某种方式抛出以下异常:

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:

我有以下行,我从不更改timeInterval变量。

private int timerInterval = 3 * 60;

更新2: 我发现,生成此异常的系统也会为以下行返回一个负数(溢出?):

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

它可以与定制的Android操作系统相关吗? (由公司 - 特定设备 - 出厂默认值)

1 个答案:

答案 0 :(得分:2)

问题很可能是period参数错误。并且在这种情况下出现意外负数的最可能原因是整数溢出。

我的猜测是你已宣布timerIntervalint而“有时”你试图推迟几百万秒......


你说这会在某些平台上返回一个负数:

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

这很奇怪!它是该平台的Android端口中的错误,或者系统时钟已被设置为不正确的值。

currentTimeMillis假设是自1970年1月1日以来的毫秒数...作为64位有符号值。除非currentTimeMillis()返回虚假值负值,否则我看不出如何从上面的表达式中得到负数。

可能相关: