Я уверен, что решение моей проблемы будет одним из тех «духовных» моментов, но я застрял, поэтому любые полезные советы будут с благодарностью получены.
Проблема: у меня есть пользовательский интерфейс с фоновым потоком. В пользовательском интерфейсе есть кнопка запуска/остановки для запуска, а затем остановки процесса в потоке. Это достигается с помощью сообщений от пользовательского интерфейса к обработчику сообщений в потоке, заключенном в цикл. Процесс потока находится в цикле 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
}
}
У меня есть сообщение logcat в сообщении STOP из пользовательского интерфейса, и оно срабатывает, но поток никогда не поднимает его, потому что он застрял в цикле while, а обработчик сообщений не получает просмотра.
Есть ли способ позволить обработчику потока проверять сообщения из цикла while в разных точках? Или есть другой способ заставить непрерывный цикл while на основе потока запускаться и останавливаться на основе сообщений из пользовательского интерфейса?
Ура Энди