Android завершает поток, созданный через runnable - PullRequest
0 голосов
/ 11 мая 2011

Скажем, в разных точках моего приложения я создаю и запускаю новый исполняемый файл, например, так:

new Thread(new Runnable() { 
    public void run() {
    while(true) {
       //do lots of stuff
       //draw lots of stuff on screen, have a good ol time
       //total loop processing time abt 1250-1500ms
       //check for conditions to stop the loop, break;
   }    }   }

Теперь есть ли способ завершить этот поток на полпути через выполнение, отличное от break;внутри моего цикла пока?Я хотел бы иметь возможность убить его специально и сразу из родительского потока, например, в случае, если пользователь только что запросил загрузить другую карту.Неудобно вставлять if (stopFlag) break; (устанавливается в родительском потоке) после каждых 5 или около того строк кода.

Я заглянул в методы Runnable и Thread и просто не вижу этого.Кто-то знает удивительный трюк?

Ответы [ 3 ]

3 голосов
/ 11 мая 2011

Вы можете использовать AsyncTask и вызывать cancel для отмены потока.

0 голосов
/ 11 мая 2011

Вы можете использовать AsyncTask как предложено, что, вероятно, лучше всего работает в этом случае. Я полагаю, что вы также можете использовать метод interrupt (), который предпочтителен, если он хорош, если вы не в Android, но все еще страдает от необходимости явно проверять, не прерван ли он:

Thread t = new Thread(new Runnable() {
    public void run() {
        while (true) {
            // do some stuff
            if (isInterrupted()) {
                break;
            }
        }
     });
t.start();

// Whoa! Need to stop that work!
t.interrupt();
0 голосов
/ 11 мая 2011

Вместо while (true) вы можете проверить условие или флаг, который будет изменен должным образом при остановке Thread / Runnable.Похоже, это предложенная стратегия , поскольку Thread.stop () устарел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...