Java Android TimerTask中与延迟参数相关的奇怪IllegalArgumentException
第行“有时”以某种方式引发以下异常:Java Android TimerTask中与延迟参数相关的奇怪IllegalArgumentException,java,android,timertask,Java,Android,Timertask,第行“有时”以某种方式引发以下异常: myTimer.scheduleAtFixedRate(timerTaskForListChecker, 0L, timerInterval*1000); 如您所见,我的延迟参数中有“0”(稍后我尝试将其更改为0L,但它也不起作用) 它如何将值“0”视为“-1543808998843” 更新1: 我有下面的一行,我从不改变timeInterval变量 Caused by: java.lang.IllegalArgumentException: Illega
myTimer.scheduleAtFixedRate(timerTaskForListChecker, 0L, timerInterval*1000);
如您所见,我的延迟参数中有“0”(稍后我尝试将其更改为0L,但它也不起作用)
它如何将值“0”视为“-1543808998843”
更新1:
我有下面的一行,我从不改变timeInterval变量
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)
...
更新2:
我发现,生成此异常的系统也会为以下行返回一个负数(溢出?):
private int timerInterval = 3 * 60;
它能与定制的安卓操作系统相关吗?(按公司-设备特定-出厂默认值)问题最有可能是
period
参数错误。在这种情况下,最有可能导致意外负数的原因是整数溢出
我猜你已经声明了timerInterval
为int
,并且“有时”你试图延迟几百万秒
您可以说,在某些平台上,这会返回一个负数:
(int)((double)System.currentTimeMillis()/1000L)
真奇怪!这要么是Android到该平台的端口中的错误,要么是系统时钟被设置为不正确的值
currentTimeMillis
值应该是自1970年1月1日以来的毫秒数。。。作为64位有符号值。我不明白如何从上面的表达式中得到负数,除非currentTimeMillis()
返回一个伪值负值
可能相关:
- 我知道这是一个老问题,但万一有人有类似的问题
我遇到了完全相同的问题,我意识到设备上的日期不知何故被重置为1920年。将其更改回解决了问题。我现在检查了它,我只有这一行:“private int timerInterval=3*60;”并且我从不在任何地方更改它。我建议您修改代码,以便在引发异常时打印出参数的实际值。。。问题是我没有得到这个异常,但是“一些”用户得到了它。我从远程异常日志中看到这些。请参阅我问题中的更新-2;我试着将Android 4.0.3平板电脑的日期设置为1970年(同一台设备,其中一位用户有此异常),因此我可以重新创建此异常,但我无法。它生成有效值。我没有主意了:/
(int)((double)System.currentTimeMillis()/1000L)