2013-04-09 5 views
0

에서 메시지를 사용하여 루프 그래서 어떤 도움이되는 힌트가 기꺼이받을 것 동안 스레드.인터럽트 나는 내 문제에 대한 해결책이 그 "대만족"순간 중 하나가 될 것입니다 확신 해요,하지만 난 붙어 UI

문제 : 배경 스레드와 UI가 있습니다. UI에는 스레드의 프로세스를 시작한 다음 중지하는 시작/중지 단추가 있습니다. 이것은 UI에서 루퍼에 싸인 스레드의 메시지 처리기에 대한 메시지를 사용하여 수행됩니다. 스레드 프로세스는 스레드 메시지 핸들러가 true/false로 설정 한 부울에 따라 while 루프에 있습니다. 그러나 일단 시작되면 더 이상 메시지가 처리되지 않고 루프가 무한대로 계속됩니다.

private class MyThread extends Thread{ 
    public void run() { 
     Looper.prepare(); 
      MyThreadChildHandler = new Handler() { 
       public void handleMessage(Message msg) { 
        switch(msg.arg1) { 
       case START: 
          boolLoop = true; 
          doWhileLoop(); 
        case STOP: 
          boolLoop = false; 
        } 
      }; 
     Looper.loop(); 
    } 

    private void doWhileLoop(){ 
     while (boolLoop = true){ 
      stuff.do 
     } 
     finish.do 
    } 

} 

본인은 UI에서 STOP 메시지에 로그 캣 메시지가 있는데 그 발사,하지만 그것은 while 루프에 붙어하고 메시지 핸들러가 look-을하지 않기 때문에 스레드는 결코 그것을 집어 들고 없다 에서. 다양한 지점에서 while 루프 내에서 메시지에 대한 스레드 핸들러 확인시키는 하나의 방법은

있습니까? 아니면 스레드 기반 UI를 통해 메시지를 기반으로 시작하고 중지 할 수있는 연속적인 while 루프를 얻는 다른 방법이 있습니까?

건배 앤디

답변

2

변경 :

while (boolLoop = true){ 
      stuff.do 
     } 

에 :

while (boolLoop == true){ 
      stuff.do 
     } 

또는 양호하게는

while (booloop){ 
      stuff.do 
     } 

당신은 (==) 지 어떤지를 확인할 필요하지 부호 (=).

또한 또 다른 한가지는 당신이 루퍼 객체를 필요로하지 않는 것입니다. while 루프로 제어하십시오. 나는 이런 식으로 할 것이다 :

나는 시간이 초과되거나 그 스레드를 제어하는 ​​핸들러의 메시지가 그 스레드의 실행을 중단 할 때까지 스레드가 그 프로세스를 무한정 실행하게한다. Activity와 Thread와 같은 두 개의 클래스. 액티비티의 상태가 쓰레드를 제어하는 ​​곳. 예를 들어, 응용 프로그램이 백그라운드로 들어가면, 실행 플래그를 false로 설정하여 중지되도록합니다. Looper 실행이 필요하지 않습니다. 또한 메시지가 처리기를 통해 전달되는 방식입니다.

+0

이 좋은 추천,하지만 난이 일을 할 것입니다 확실하지 않다. OP의 진정한 문제는'handleMessage'가'START' 메시지에서 결코 돌아 오지 않는다는 것입니다, 그래서 루퍼는 결코 다음 메시지를 처리하지 못합니다. –

+0

슈퍼 빠른 응답 녀석 주셔서 감사합니다. –

+0

JoxTraex, = vs ==는 내 코드를 생략 한 오타였습니다. UI/스레드 제어를 제공하고 대신 메시징을 사용하기 위해 전역 변수를 피하려고했습니다. 그러나, 이것은 나의 현재의 토끼 구멍으로 나를 이끌고있다. 정말 메시지을 많이 대기 할 필요가 없습니다,하지만 난 여전히 UI에서 메시지를 기반으로 while 루프를 중단 할 수있는 방법을 필요로하는 아마 루퍼 필요가 없습니다. –