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)

カスタマイズされた Android os に関連する可能性はありますか? (会社別 - デバイス固有 - 工場出荷時のデフォルト)

4

2 に答える 2

2

period問題は、パラメーターが間違っている可能性が最も高いです。このような状況で予想外の負の数が発生する原因として最も可能性が高いのは、整数のオーバーフローです。

私の推測では、あなたは として宣言timerIntervalし、int「時々」数百万秒遅らせようとしています...


これは一部のプラットフォームで負の数を返すと言います:

    (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 に答える