Как остановить потоки и обработчики в Android - PullRequest
0 голосов
/ 07 мая 2011

Я, честно говоря, не могу понять - я слышал, что thread.stop() не очень хорошая вещь для использования Это также не работает для меня. Как заставить потоки / обработчики перестать работать?

Ответы [ 4 ]

5 голосов
/ 07 мая 2011

Потоки должны заканчиваться "вежливо".Вы должны встроить некоторый механизм для остановки потока.Вы можете иметь переменный логический параметр, который проверяется в каждом цикле вашего потока (при условии, что у вас там есть циклы), например:

while (!threadStop) {
    // Do stuff
}

И затем вы можете установить логическое значение равным false из другого потока (убедитесь, что вы справились со всеми проблемами синхронизации) и ваш поток остановится на следующей итерации.

2 голосов
/ 18 февраля 2014

Хорошо, ответ на остановку темы уже сделан.Чтобы остановить обработчик, вы должны использовать следующий метод:

removeCallbacksAndMessages из класса обработчика вот так

myHandler.removeCallbacksAndMessages(null);
0 голосов
/ 30 июля 2012

вы можете использовать это так ..

Thread mythread=new Thread();

if(!mythread){
    Thread dummy=mythread;
    mythread=null;
    dummy.interrupt();
}

или вы можете использовать

mythread.setDeamon(true);
0 голосов
/ 27 мая 2011

Правильный способ остановки обработчика: handler.getLooper().quit();
Я обычно реализую это, отправляя сообщение о выходе обработчику, который завершает себя.

Правильный способ остановки общего потока:1005 *
Поток, который останавливается, должен обрабатывать прерывание:

if(isInterrupted())
    return;

Это можно поместить в цикл, если вы хотите:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = null;
try {
    while(!isInterrupted() && (line = br.readLine()) != null) {
        // Do stuff with the line
    }
}
catch(IOException e) {
    // Handle IOException
}
catch(InterruptedException e) {
    // Someone called interrupt on the thread
    return;
}
...