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操作系统相关吗? (由公司 - 特定设备 - 出厂默认值)
答案 0 :(得分:2)
问题很可能是period
参数错误。并且在这种情况下出现意外负数的最可能原因是整数溢出。
我的猜测是你已宣布timerInterval
为int
而“有时”你试图推迟几百万秒......
你说这会在某些平台上返回一个负数:
(int)((double)System.currentTimeMillis()/1000L)
这很奇怪!它是该平台的Android端口中的错误,或者系统时钟已被设置为不正确的值。
currentTimeMillis
值假设是自1970年1月1日以来的毫秒数...作为64位有符号值。除非currentTimeMillis()
返回虚假值负值,否则我看不出如何从上面的表达式中得到负数。
可能相关: