2016-10-04 3 views
1

이 문제가 있습니다. 다른 스레드에서 내 TextView을 업데이트하려고 시도하고 있으며 실망시키지 않습니다.Android runOnUiThread가 실행되지 않음

나는 다양한 솔루션을 시도했지만 그 중 아무 것도 도움이되지 않았다. 내 while 루프 코드에서는 "Started new loop"라는 메시지가 항상 인쇄되지만 계속되는 것은 아닙니다. runOnUiThread.

다른 스레드에서 TextView을 업데이트하는 방법을 알려줄 수있는 사람이 있습니까?

//second thread 
protected void startKakkosThread() { 
    Thread t2 = new Thread() { 
     public void run() { 
      while (true) { 
       System.out.println("Started new loop"); 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         try { 
          if(rullaavaNumero >= 0) { 
           rullaavaNumero--; 
           System.out.println(rullaavaNumero); 
           pelaajanPisteetTeksi.setText("" + rullaavaNumero); 
           sleep(1000); 
          }else{ 
           rullaavaNumero = 9; 
           System.out.println(rullaavaNumero); 
           pelaajanPisteetTeksi.setText("" + rullaavaNumero); 
           sleep(1000); 
          } 
         }catch (InterruptedException e){ 
          e.printStackTrace(); 
         } 
        } 
       }); 
      } 
     } 
    }; 
    t2.start(); 
} 
+1

나는 당신을 생각 대신에'Handler'와 아마도'postDelayed'를 사용해야합니다. –

+0

AsyncTask를 사용하는 것을 고려해야합니다. – JoxTraex

답변

0

다음은 빠른 수정입니다. 무한 루프가 있으며, 스레드가 시작될 확률 (시간)보다 빠르게 실행됩니다. 그럼에도 불구하고 스레드에서 if 문을 사용하여 스레드가 잠자는 경우에도 스레드가 시작되지 않으면 절전 모드가 작동하지 않습니다.

스레드 내부의 수면이 이와 같이 작동하지 않습니다. 무한 while 루프를 지연시키고 싶다면, while 루프의 쓰레드 밖에서 sleep을 움직여야한다.

따라서 수면을 추가하여 스레드를 지연시킬 수도 있지만 달성하고자하는 것에 따라 스레드를 지연시킬 수 있습니다.

귀하의 최종 코드는 다음과 같습니다

protected void startKakkosThread() { 
    Thread t2 = new Thread() { 
     public void run() { 
      while (true) { 
       System.out.println("Started new loop"); 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         if (rullaavaNumero >= 0) { 
          rullaavaNumero--; 
          System.out.println(rullaavaNumero); 
          pelaajanPisteetTeksi.setText("" + rullaavaNumero); 
          // no need for sleep here 
          // sleep(1000); 
         } else { 
          rullaavaNumero = 9; 
          System.out.println(rullaavaNumero); 
          pelaajanPisteetTeksi.setText("" + rullaavaNumero); 
          // no need for sleep here 
          // sleep(1000); 
         } 
        } 
       }); 

       // add this part 
       try { 
        sleep(1000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    }; 
    t2.start(); 
} 

나는 그것이 검사를하고 당신은 또한 @cricket이 제안하는 것을 갈 수있다, 작동합니다.

내 눈에는 문제의 일부가 아닌 다른 문제가 있습니다. 그러나 언급하는 것이 좋습니다. 난 당신이 9에서 0로 계산한다고 가정,이 경우, 당신은 그래서 당신의 코드 라인은 다음과 같을 것이다 = 그렇지 않으면 당신이 -1까지 카운트를 얻을 제거하여 다음 줄을 수정해야합니다

if(rullaavaNumero > 0) {...