마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

runOnUiThread 1초마다 반복실행

0 추천
protected void onResume() {
  
  this.overridePendingTransition(0, 0);
  super.onResume();
  
  Thread thread = new Thread(new Runnable(){
   @Override
   public void run(){
    try{
     Thread.sleep(100);
    } catch (Exception e){
     e.printStackTrace();
    }
    
    runOnUiThread(new Runnable(){
               @Override
               public void run() {
                try{
        Thread.sleep(100);
       } catch (Exception e){
        e.printStackTrace();
       }
                
               final TextView timertxt01 = (TextView) findViewById(R.id.TimerView01);
       final TextView timertxt02 = (TextView) findViewById(R.id.TimerView02);
       
       Calendar c = Calendar.getInstance();
       final int Year = c.get(Calendar.YEAR);
       int Month = c.get(Calendar.MONTH);  // 1월(0), 2월(1)...
       int Day = c.get(Calendar.DAY_OF_MONTH);
       final int DayOfWeek = c.get(Calendar.DAY_OF_MONTH); // 일요일(1), 월요일(2)...
       int Hour = c.get(Calendar.HOUR_OF_DAY);  // HOUR는 12시간, HOUR_OF_DAY는 24시간
       int Minute = c.get(Calendar.MINUTE);
       final int Second = c.get(Calendar.SECOND);
       final int AmPm = c.get(Calendar.AM_PM);  // AM(0), PM(1)
       
       String stringDayOfWeek[] = {"", "일", "월", "화", "수", "목", "금", "토"};
       String stringAmPm[] = {"오전", "오후"};
       
       Month = Month+1;
       
       String str_Month = "";
       String str_Day = "";
       String str_Hour = "";
       String str_Minute = "";
       
       if (Month < 10){
        str_Month = "0";
       } else {
        str_Month = "";
       }
       
       if (Day < 10){
        str_Day = "0";
       } else {
        str_Day = "";
       }
       
       if (Hour < 10){
        str_Hour = "0";
       } else {
        str_Hour = "";
       }
       
       if (Minute < 10){
        str_Minute = "0";
       } else {
        str_Minute = "";
       }
      
      timertxt01.setText(Year + "." + str_Month + Month + "." + str_Day + Day);
      timertxt02.setText(str_Hour + Hour + " : " + str_Minute + Minute);
               }
    });
    
   }
   
  });
  thread.start();
 }

이 소스를 넣어놓으면 일단 처음 실행시에 실행(TextView에 현재 시간 넣어주는것)이 됩니다.

그런데 한번만 실행되고 그 후론 실행이 안되네요.

소스에 틀린 부분이나, 추가해야할 부분 있으면 알려주세요.

개님의습성 (2,500 포인트) 님이 2013년 4월 25일 질문
앗 방금 해결되었습니다. 어제 답변해주신분이 있었는데 제가 이해를 잘 못해서 못했었는데, 오늘 적용시켜보니 되네요.
public void run(){
                while(true)

                {

}
이렇게 while 문으로 감싸주니까 바로 되네요.
답변다는동안 해결이 되셧나보군요 허허..

1개의 답변

+1 추천
 
채택된 답변

저번에 질문하신거같은데 아직이해를 못하셧나보군요..

쓰레드에 기본적으로 반복되도록하는 기능은 탑재되어있지않아요;

원하는만큼 반복되도록 반복문을 줘야해요.

10라인에서 1초 있다가 다시 19라인에서 1초있다가 나머지 부분들 처리하고 바로 끝 

결과적으로 1번만 돌게 됩니다;

 

쓰레드안에서 또 쓰레드 만드는부분은지우고

 

24~72번까지가 처리부분같은데

핸들러 하나만들어서 그안에 처리부분을 넣고 쓰레드에서는 1초 딜레이후 핸들러에 메세지를 보내서 호출해보세요.

private Handler handler = new Handler(){

	@Override
	public void handleMessage(Message msg) {
		// TODO Auto-generated method stub
		//처리코드 24~72라인추가
	}
	
};

protected void onsResume(){
	
	Thread thread = new Thread(){
    	public void run(){
    		while(true){
	    		try{
	    			sleep(1000);
	    		}catch (Exception e) {
					// TODO: handle exception
	    			e.printStackTrace();
				}
	    		handler.sendEmptyMessage(0);
    		}
    	}
    };
    thread.start();
    
}

이런식으로요

 

 

 

 

얼룩돼지 (15,720 포인트) 님이 2013년 4월 25일 답변
개님의습성님이 2013년 4월 25일 채택됨
...