Как остановить поток в 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().

Другие вопросы по тегам