2012-04-26 35 views
0

實際上,我設計了一個分離的Timer類,它帶有用於在textview上顯示分秒的處理程序。這工作正常,因爲我已經調試它和處理程序將確定句柄,但文本視圖不會得到更新pl幫助我在這方面。 我正在爲Timer類標記下面的代碼。 在此先感謝。文本視圖沒有通過處理程序得到更新

public class Timer 
{ 
    private int _interval; 
    public int getInterval() 
    { 
     return _interval; 
    } 
    public void setInterval(int delay) 
    { 
     _interval = delay; 
    } 
    private Handler handler; 
    private Runnable _tickHandler; 
    private Runnable delegate; 
    private boolean ticking; 
    public boolean getIsTicking() 
    { 
     return ticking; 
    } 
    public Timer(int interval) 
    { 
     _interval = interval; 
     handler = new Handler(); 
    } 
    public Timer(int interval, Runnable onTickHandler) 
    { 
     _interval = interval; 
     setOnTickHandler(onTickHandler); 
     handler = new Handler(); 
    } 
    public void start(int interval, Runnable onTickHandler) 
    { 
     if (ticking) return; 
     _interval = interval; 
     setOnTickHandler(onTickHandler); 
     handler.postDelayed(delegate, _interval); 
     ticking = true; 
    } 
    public void start() 
    { 
     if (ticking) return; 
     handler.postDelayed(delegate, _interval); 
     ticking = true; 
    } 
    public void stop() 
    { 
     handler.removeCallbacks(delegate); 
     ticking = false; 
    } 
    public void setOnTickHandler(Runnable onTickHandler) 
    { 
     if (onTickHandler == null)  return; 
     _tickHandler = onTickHandler; 
     delegate = new Runnable() 
     { 
      public void run() 
      { 
       if (_tickHandler == null) return; 
       _tickHandler.run(); 
       handler.postDelayed(delegate, _interval); 
      } 
     } 
     ; 
    } 
} 

以下是我使用這樣

runOnUIThread(new Runnable(){ 

public void run(){ 

lblDevOnOff.setText(""); 
lblDevOnOff.setText(String.format("%d:%02d", minutes,seconds)); 
} 
}) 

你應該

handlerrunOnUIThread()東西更新文本視圖

Timer tmr = new Timer(100,new Runnable() 
{ 
    public void run() 
    { 
     long millis = System.currentTimeMillis() - mStartTime; 
     int seconds = (int) (millis/1000); 
     int minutes = seconds/60; 
     seconds = seconds % 60; 
     lblDevOnOff.setText(""); 
     lblDevOnOff.setText(String.format("%d:%02d", minutes,seconds)); 
    } 
} 
); 
tmr.start(); 

回答

1

把這個代碼的代碼這樣做是因爲任何與UI相關的東西都應該在UI線程上運行只有...

0

啊,這是從Android Dev Guide

因此,僅僅兩個規則Android的單線程模型:

  • 不要阻塞UI線程
  • 不要從UI線程之外訪問Android UI工具包
相關問題