Как остановить поток в Android?
Я использую поток для инициализации некоторых ресурсов при отображении заставки с индикатором выполнения, а иногда запускаю другое действие (для результата).
Сначала я использовал AsyncTask, который прекрасно работает, за исключением того, что я обнаружил, что не могу использовать другой (Android 1.5), поэтому мне пришлось использовать Thread.
В настоящее время мой код выглядит так:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splashscreen);
m_progressBar = (ProgressBar) findViewById(R.id.progressBar);
m_progressBar.setMax(10);
// start the Init process
Thread thread = new Thread(initTask);
thread.start();
Так как Thread.stop() устарел, и я не могу использовать Thread.interrupt(), если я нажму клавишу возврата, я не смогу остановить поток от запуска нового действия.
Какие-либо предложения?
2 ответа
Остановка потока требует сотрудничества с рассматриваемой нитью. Основная идея состоит в том, чтобы отправить потоку сигнал, и он регулярно проверяет этот сигнал, а затем останавливается. Самый простой "сигнал" - это простое логическое поле, которое он проверяет.
Во-первых, вы можете использовать несколько AsyncTasks
в то же время нет предела этому. В чем была проблема?
Обновление: Действительно до 1.6 AsyncTasks выполнялись последовательно в том же фоновом потоке, один за другим.
Во-вторых, многопоточность в java является кооперативной - вы не можете уничтожить нить, а скорее должны уведомить ее о своем намерении быть остановленным, а затем он останавливает ее сам (т. Е. Выходит из метода run).
Чтобы дать сигнал об остановке, просто укажите логическое поле running=true, которое проверяет поток в своем основном цикле. При запуске ==false поток выходит из метода run().