7

以下は、プロジェクトでタスクをスケジュールするために使用しているコード スニペットです。

mTimer = new Timer();
mTimer.schedule(new TimerTask() {

 @Override
 public void run() {
  //Do Something
 }

}, interval, interval);

これはうまくいきます。上記の間隔の後にイベントを取得します。ただし、日付が現在の設定よりも小さく設定されている場合、これはイベントの送信に失敗します。

なぜこの動作が起こっているのか誰にも分かりますか?

4

2 に答える 2

6

Timer単調ではない に基づいているSystem.currentTimeMillis()ため、システムクロックを変更すると失敗します。

Timerは Android クラスではありません。これは、既存の非 Android ライブラリをサポートするために Android API に存在する Java クラスです。ほとんどの場合、Timer新しい Android コードで a を使用することはお勧めできません。Handlerアプリのアクティビティまたはサービスの有効期間内に発生する時限イベントには を 使用します。単調なHandlerに基づいてSystemClock.uptimeMillis()ます。アプリが実行されていない場合でも発生する時間指定イベントには、アラームを使用します。

于 2016-01-11T07:51:43.440 に答える
0

このコードを使用してください..これはあなたを助けるでしょう..

Timer t;
seconds = 10;

public void startTimer() {
        t = new Timer();
        //Set the schedule function and rate
        t.scheduleAtFixedRate(new TimerTask() {

            @Override
            public void run() {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        if (seconds == 0) {
                            t.cancel();
                           seconds = 10;
                      // DO SOMETHING HERE AFTER 10 SECONDS
                       Toast.makeText(this,"Time up",Toast.LENGTH_SHORT).show();
                        }
                        seconds -= 1;
                    }
                });
            }
        }, 0, 1000);
    }
于 2016-01-07T05:43:26.983 に答える