Прекратить изгоевую нить таким образом, чтобы каждый раз повсюду практически невозможно.
Если вы можете управлять исходным кодом работающих потоков, вы должны добавить метод, с помощью которого вы можете остановить поток, когда вам нужно. В основном этот метод изменяет логическую переменную, и поток периодически проверяет это значение, чтобы увидеть, продолжать или нет.
public class MyTask implements Runnable {
// Set this to true when thread must stop.
private boolean mStopRequested = false;
public void run() {
while (mStopRequested == false) {
// ...
}
}
}
Если вы называете 3-библиотеками, которые не обеспечивают такой способ, то вам не повезло, и приходится прибегать к уродливым кладжи. Однажды мне пришлось убить длинный вызов сторонней библиотеки, удалив файл, к которому была обращена библиотека (он выбросил исключение FileNotFoundException и вышел). И это работало только в Unix-системах.
Ваш пробег будет отличаться.
Можете ли вы не просто дождаться их завершения, используя 'Thread.join()'? – hmjd
Сделав шаг назад, вам действительно нужен собственный поток или вы можете использовать пул потоков через [Исполнитель] (http://docs.oracle.com/javase/tutorial/essential/concurrency/pools.html)? – weston
... ссылка на исполнитель для Android threadpool: http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html – weston