Как второй раз запустить поток?

433
19 февраля 2017, 09:13

Дело в том что поток с первого раза корректно срабатывает и через цикл я останавливаю этот поток. Потом через какое то время обратно запускаю этот же поток но получаю ошибку

IllegalThreadStateException: Thread already started.

Может я неправильно останавливаю или просто у меня логика неправильная. Нужна помощь.

SlideThread slideThread;

и в onCreate() инициализирую..

slideThread = new SlideThread();

и тут проверка

if (video.getCategory().equals("advertising")) {
    if (slideTHread.isAlive){
        slideThread.interrupt();
    }
}
if (video.getCategory().equals("background")) {
    if (!slideThread.isAlive){
        slideThread.start();
    }
}

//....

public class SlideThread extends Thread {
        @Override
        public void run() {
            super.run();
            final List<Banner> bannerList = GlobalData.loadBannerInfo(MainActivity.this);
            for (int i = 0; i < bannerList.size(); i++) {
                final File file = new File(Application.banner_path + bannerList.get(i).getName());
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        mBannerView.setVisibility(View.VISIBLE);
                        mBannerView.setImageBitmap(BitmapFactory.decodeFile(file.getAbsolutePath()));
                    }
                });
                try {
                    Thread.sleep(15 * 1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
        @Override
        public void interrupt() {
            super.interrupt();
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    mBannerView.setVisibility(View.GONE);
                }
            });
        }
    }

и еще даже после завершения потока, все равно через 15 секунд задержки само срабатывает.

Дайте подсказку что я не так делаю?

Answer 1

Метод start() у объекта Thread можно вызвать лишь единожды.

Поэтому либо встраивайте внутрь потока логику запусков-остановок, либо создавайте и запускайте каждый раз новый поток.

READ ALSO
Изменение TextView в Tabbed Activity в зависимости от даты

Изменение TextView в Tabbed Activity в зависимости от даты

Нужно, чтобы textView в фрагменте из Tabbed Acticity менялся в зависимости от даты в календаре, вот код этого окна: Tab1java

335
Передача массива изображений по сети

Передача массива изображений по сети

ЗдравствуйтеНеожиданно столкнулся с проблемой

325
Java создать файл в папке

Java создать файл в папке

Мне понадобилось создать файл в папке, но какие бы методы не пробовал — пишут ошибкуЗвучат они все примерно так:

475
Реализация задачи на Java

Реализация задачи на Java

Обход дерева на заданную глубину без использования рекурсии

293