2015-09-25 90 views
0

我是新來的android,並且一直在閱讀有關工作線程和不阻塞UI線程的內容。我正在玩一個簡單的計時器應用程序,該應用程序啓動一個線程,在創建活動時每秒更新一次文本視圖。所以我的問題是,現在最好的辦法是做什麼。下面的兩個例子都有效,但是有更好的(更有效率/更多的Android)方式嗎?性能 - 從計時器線程更新UI而不會阻塞UI線程

final Handler handler = new Handler(); 

    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      seconds++; 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        secondsTextView.setText(seconds); 
       } 
      }); 
      handler.postDelayed(this, 1000); 
     } 
    }, 1000); 

new Thread(){ 
     @Override 
     public void run(){ 
      try{ 
       while(!isInterrupted()){ 
        Thread.sleep(1000); 
        runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          seconds++; 
          secondsTextView.setText(seconds); 
         } 
        }); 
       } 
      }catch(Exception e){ 
       Log.e("Activity1", e.toString()); 
      } 
     } 
    }.start(); 
+0

雖然你的兩個例子都不是那麼好。 – Elltz

回答

3

的更有效的方法是:

timeOnTextView.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
     seconds++; 
     timeOnTextView.postDelayed(this, 1000); 
     } 
    }, 1000); 

Runnable傳遞給postDelayed()run()調用主應用程序線程,所以你不需要使用runOnUiThread()

由於postDelayed()實施於View,您不需要Handler