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

会不会和定制的安卓操作系统有关?(按公司 - 特定设备 - 出厂默认值)

4

2 回答 2

2

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

我的猜测是,您已经声明timerIntervalint“有时”您尝试延迟几百万秒...


您说这在某些平台上返回负数:

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

这很奇怪!它要么是 Android 移植到该平台的错误,要么是系统时钟被设置为不正确的值。

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

可能相关:

于 2013-08-04T06:21:05.090 回答
1

我知道这是一个老问题,但万一有人有类似的问题。

我遇到了同样的问题,我意识到设备上的日期以某种方式重置为 1920 年。将其改回解决了这个问题。

于 2017-05-06T05:25:05.963 回答