에서 메시지를 사용하여 루프 그래서 어떤 도움이되는 힌트가 기꺼이받을 것 동안 스레드.인터럽트 나는 내 문제에 대한 해결책이 그 "대만족"순간 중 하나가 될 것입니다 확신 해요,하지만 난 붙어 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 루프를 얻는 다른 방법이 있습니까?
건배 앤디
이 좋은 추천,하지만 난이 일을 할 것입니다 확실하지 않다. OP의 진정한 문제는'handleMessage'가'START' 메시지에서 결코 돌아 오지 않는다는 것입니다, 그래서 루퍼는 결코 다음 메시지를 처리하지 못합니다. –
슈퍼 빠른 응답 녀석 주셔서 감사합니다. –
JoxTraex, = vs ==는 내 코드를 생략 한 오타였습니다. UI/스레드 제어를 제공하고 대신 메시징을 사용하기 위해 전역 변수를 피하려고했습니다. 그러나, 이것은 나의 현재의 토끼 구멍으로 나를 이끌고있다. 정말 메시지을 많이 대기 할 필요가 없습니다,하지만 난 여전히 UI에서 메시지를 기반으로 while 루프를 중단 할 수있는 방법을 필요로하는 아마 루퍼 필요가 없습니다. –