2015-04-16 88 views
0

我期待下面的代碼塊寫入「Hello!」每秒一次。但它寫了兩次。我究竟做錯了什麼?運行中重複兩次()

handler = new Handler(); 
    final Runnable r = new Runnable() { 
     public void run() { 
      Log.d("message", "Hello!");    
      handler.postDelayed(this, 1000); 
     } 
    }; 

    handler.postDelayed(r, 1000); 
    runOnUiThread(r); 

回答

3

它會寫兩次,因爲您在UI線程隊列中發佈了兩次。一個與處理程序,另一個與可運行。

handler.postDelayed(r, 1000); 
runOnUiThread(r); 

因此根據您的要求擺脫一二。對我來說,它看起來像你只想要handler

1

做一個簡單的實現,創建一個TimerTask

Timer timer = new Timer(); 
timer.schedule (new TimerTask() { 
      @Override 
      public void run() { 
       // Print your Hello here... 
      } 
     }, 0, 1000);