Подтвердить что ты не робот

Когда я запускаю Thread второй раз: java.lang.IllegalThreadStateException: Thread уже запущен

У меня есть Thrad и Handler:

Handler handler = new Handler() {
    @Override
    public void handleMessage(android.os.Message msg) {
        super.handleMessage(msg);
        //do somethink
    }
};

Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {
        //do somethink
        msg.obj = 1;
        handler.sendMessage(msg);
        thread.interrupt();
    }
});

Когда приложение запускается, в первый раз thread.start(); все работает нормально. Но когда я пытаюсь запустить thread.start(); второй раз с кнопки у меня есть:

E/MessageQueue-JNI: java.lang.IllegalThreadStateException: поток уже запущен.

4b9b3361

Ответ 1

Вы должны проверить состояние этого потока перед его запуском.

if (thread.getState() == Thread.State.NEW)
{
     thread.start();
}

Ответ 2

Это не хорошая идея начать тему более одного раза. Вы должны проверить, запущен ли нить или нет. если Thread еще не запущен

if(!thread.isAlive()){
thread.start();
}

Лучшая идея - создать Создать новый поток.

Ответ 3

В конце run() ваш поток умирает. Если вы хотите сохранить его в живых, добавьте блокирующую очередь в поток и сделайте run() большой цикл while, который читается из очереди. Вместо того, чтобы вызывать начало для каждого сообщения, просто добавьте его в очередь.

Конечно, вам все равно нужно вызвать start() один раз (когда ваша программа инициализируется).