2014-03-01 16 views
0

試圖讓計時器每秒調用一次方法。我無法弄清楚爲什麼這個代碼不工作。代碼是從我activity_main.xml中和MainActivity.java採取使用java.util.Timer

activity_main:

<ToggleButton 
    android:id="@+id/btnStartStop" 
    android:layout_width="80dp" 
    android:layout_height="50dp" 
    android:layout_alignLeft="@+id/clockDisplay" 
    android:layout_below="@+id/clockDisplay" 
    android:layout_marginLeft="40dp" 
    android:layout_marginTop="0dp" 
    android:textOff="Start" 
    android:textOn="Stop" 
    android:onClick="toggleStartStop" /> 

MainActivity.java:

public void toggleStartStop(View view){ 
     if(((ToggleButton) view).isChecked()){ 
      Timer timer = new Timer("timer", true); 
      TimerTask task = new startTask(); 
      timer.schedule(task, new Date(), 1000); 
     }else{ 
      stopTimer(); 
     } 
    } 

class startTask extends TimerTask 
{ 
    public void run() 
    { 
     System.out.println("inc secs var"); 
    } 
} 
+1

什麼是不工作?線程沒有啓動?提供更多的細節。 –

+0

嘗試使用'ScheduledExecutorService'而不是 – fge

+0

我會檢查一下。與此同時...我運行應用程序,單擊按鈕,沒有任何打印。 – Williamz

回答

0

用於調試,用斷點或Log.d()電話,看看是否定時器設置代碼正在運行。一般來說,使用Log.d()println()更好。

在Android上,比使用Java定時器更好的是send a message to aHandler。操作系統可以更好地進行管理,例如在活動生命週期中。

class UpdateHandler extends Handler { 
    private static final int MSG_UPDATE = 1; 
    private static final long UPDATE_INTERVAL = 1000; // msec 

    @Override 
    public void handleMessage(Message msg) { 
     super.handleMessage(msg); 
     switch (msg.what) { 
      case MSG_UPDATE: 
       // do stuff... 
       scheduleNextUpdate(); 
       break; 
     } 
    } 

    void scheduleNextUpdate() { 
     sendEmptyMessageDelayed(MSG_UPDATE, UPDATE_INTERVAL); 
    } 

} 
+0

這看起來幾乎就像是C中的一箇中斷。我會盡快嘗試 – Williamz

+0

Log.d實際上工作。我正在努力使用處理程序 – Williamz

+0

處理程序不是我正在嘗試每秒更新UI的答案。 (無法從其他線程更新UI)。 – Williamz

相關問題