Как остановить все текущие рабочие потоки в приложении Android без остановки основного потока?Как остановить все рабочие потоки в приложении android
Любой пример для этого?
Как остановить все текущие рабочие потоки в приложении Android без остановки основного потока?Как остановить все рабочие потоки в приложении android
Любой пример для этого?
этот пост говорит тонну о потоках, пожалуйста, читать и перепечатывать, если это не отвечает на вопрос
в Java, не правда поставить метод, чтобы остановить поток.
вы можете только interrupt
нить, но поток должен в состоянии, которое можно прервать, как sleep
, wait
и т.д ...
или вы можете использовать некоторые приемы, чтобы сделать исключение нить бросить , такие как:
1.если нить подключается к сети, вы хотите остановить поток, вы можете закрыть сетевое соединение, выбросить ioexception;
2. Если поток прочитан, вы можете закрыть поток, чтобы выбросить ioexception;
3.Если нить запрос к базе данных, вы можете закрыть базу данных
так это зависит от вашего потока работы.
Фактически нить имеет метод 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 и потоки прекратятся. Это «правильное» решение.
Что вы имеете в виду при остановке основной темы? что вы имеете в виду с рабочими потоками? – Blackbelt
Вы пытались найти что-то связанное? У StackOverflow есть хороший инструмент поиска.Ваш вопрос нелегко понять, поясните. –