2012-04-26 3 views
0

사실 저는 textview에서 분 및 초를 표시하는 핸들러로 seprate Timer 클래스를 설계했습니다. 이것은 잘 작동하고 핸들러가 핸들을 처리 할 것이지만 텍스트 뷰는 업데이트 된 PL을 얻지 못한다. 타이머 클래스에 대해 아래 코드에 태그를 지정하고 있습니다. 사전에 감사합니다. 아래핸들러를 통해 텍스트 뷰가 업데이트되지 않습니다.

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

당신이해야처럼

handler 또는 runOnUIThread() 뭔가

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에서입니다 :

따라서, 안드로이드의 단일 스레드 모델에 두 가지 규칙이 간단있다 :

  • UI 스레드를 차단하지 마십시오는
  • UI 스레드 외부에서 Android UI 툴킷에 액세스하지 마십시오.
관련 문제