2014-12-14 8 views
0

메인 UI 스레드가 차단되는 이유를 알지 못합니다. function doSomething()을 호출하는 버튼이 있습니다.메인 스레드 차단하기

randomButton.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        doSomething();  
       } 
    }); 
} 

    // My private helper funtion 

    private void doSomething() { 

       Thread t1 = new Thread() { 

        @Override 
        public void run() { 

         long startTime = SystemClock.uptimeMillis(); 
         Log.e(TAG, "Start Time = "+startTime); 
         while((SystemClock.uptimeMillis()-startTime)<6000){// Loop for 6 seconds 
          Log.e(TAG, "Diff ="+(SystemClock.uptimeMillis()-startTime));       
         }  
        }  
       }; 
       t1.run(); 
     } 

문제는 내가 버튼을 누르면, 내 루프가 실행되는 시간 (여기 6 초) 동안 눌린 채로 남아 있습니다. 루프가 계속 실행 되더라도 사용자가 UI 요소를 계속 사용할 수있는 방식으로이 도구를 원합니다. 그게 내가 새 스레드를 만든 이유 야. 내가 뭔가 잘못하고 있는거야?

감사합니다.

+1

t1.run() 대신't1.start()'를 호출해야한다. –

답변

5

실행을 호출하여 스레드를 시작하지 마십시오. start()를 호출합니다. 호출 실행은 현재 쓰레드에서 실행된다.