2016-01-07 26 views
5

以下是我用我的項目,該項目計劃任務Android的定時器附表

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

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

}, interval, interval); 

也能正常工作的代碼片段。我提到的時間間隔後得到事件。但如果日期設置小於當前設置的當前時間,則無法發送任何事件。

是否有人知道爲什麼會發生這種行爲?

+0

詳細說明您的問題 –

+0

如果設置了計時器並且日期從設置更改爲低於當前日期,則無法給出回調 – Neji

+0

但是爲什麼計時器應該運行時間低於當前日期?你爲什麼不禁止選擇比當前日期少的日期呢? –

回答

4

Timer當您更改系統時鐘,因爲it's based on System.currentTimeMillis(),這不是單調的失敗。

Timer不是Android類。它是Android API中存在的Java類,用於支持現有的非Android庫。在新的Android代碼中使用Timer幾乎總是一個糟糕的主意。使用Handler進行應用程序活動或服務生命週期內發生的定時事件。 Handler is based on SystemClock.uptimeMillis(),其中單調。即使您的應用程序未運行,也應使用Alarm作爲定時事件。

+0

完美!!,正是我所需要的。我已經使用處理程序解決了我的問題,但很好奇在使用第一個計時器時發現錯誤! :) – Neji

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); 
    } 
+0

我需要理由爲什麼它不工作時,我改變日期低於當前 – Neji