2012-03-14 3 views
6

Как остановить все текущие рабочие потоки в приложении Android без остановки основного потока?Как остановить все рабочие потоки в приложении android

Любой пример для этого?

+0

Что вы имеете в виду при остановке основной темы? что вы имеете в виду с рабочими потоками? – Blackbelt

+0

Вы пытались найти что-то связанное? У StackOverflow есть хороший инструмент поиска.Ваш вопрос нелегко понять, поясните. –

ответ

1

этот пост говорит тонну о потоках, пожалуйста, читать и перепечатывать, если это не отвечает на вопрос

Stopping/Destroying a Thread

1

в Java, не правда поставить метод, чтобы остановить поток.

вы можете только interrupt нить, но поток должен в состоянии, которое можно прервать, как sleep, wait и т.д ...

или вы можете использовать некоторые приемы, чтобы сделать исключение нить бросить , такие как:

1.если нить подключается к сети, вы хотите остановить поток, вы можете закрыть сетевое соединение, выбросить ioexception;

2. Если поток прочитан, вы можете закрыть поток, чтобы выбросить ioexception;

3.Если нить запрос к базе данных, вы можете закрыть базу данных

так это зависит от вашего потока работы.

1

Фактически нить имеет метод stop(), поэтому вы можете просматривать все рабочие потоки и вызывать этот метод для каждого из них.

Вопрос: «Где получить список рабочих потоков?» Лучшее решение - хранить этот список где-то на уровне приложения, т. Е. Каждый раз, когда вы создаете рабочий поток, поместите его в специальный список. Это лучшее решение, потому что вы и только вы знаете, что поток является «рабочим» потоком.

Но теоретически вы можете даже динамически обнаружить ваше приложение и получить потоки. Существует статический метод Thread.enumerate(Thread[] threads), который заполняет предоставленный массив. Но как узнать, сколько потоков работает сейчас? Используйте Thread.activeCount().

Thread[] threads = new Thread[Thread.activeCount()]; 
Thread.enumerate(threads); 
for (Thread t : threads) { 
    if (isWorkerThread(t)) { 
     t.stop(); 
    } 
} 

Это зависит от вас, чтобы определить рабочие темы. Например, для этого можно использовать имя потока или трассировку стека потока.

НО это преступление, чтобы назвать устаревший метод stop(). Пожалуйста, обратитесь к javadoc этого метода, чтобы узнать о причинах.

«Правильный» метод - реализовать изящный механизм выключения на уровне приложения. Каждый поток должен проверять некоторый флаг, который говорит, должен ли поток отключиться, а когда флаг истинно, просто вернитесь из метода run(). В этом случае очень просто закрыть рабочие потоки: просто установите значение этого флага в true и потоки прекратятся. Это «правильное» решение.

Смежные вопросы