Начать и прервать и снова запустить поток

Я начал тему, когда активность создана в Android

при нажатии кнопки "Стоп" он прерывает поток, чтобы увидеть мои данные в определенное время, после чего я запускаю поток, нажимая кнопку "Старт", он снова запускает поток

иногда это работает должным образом, иногда я получаю прерванную ошибку,

strt.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
             Drawer.start();
   });
    stp.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        Drawer.interrupt();  });

что делать?

1 ответ

Если предположить, Drawer является потоком, вы не можете запустить его дважды: "Никогда не разрешено запускать поток более одного раза". Ваши основные предположения о том, как написать этот код, ошибочны.

Я бы предложил не использовать темы напрямую. Вместо. Используйте ExecutorService, например:

ExecutorService executor = Executors.newFixedThreadPool(1);

Затем отправьте работу в этот пул в onClickListener вашей кнопки запуска:

future = executor.submit(runnable);

где runnable это работа, которую вы хотите сделать.

Возвращенный Future это вещь, которая передает результат работы runnable, но также позволяет вам делать такие вещи, как отмена (например, попросить его прекратить работу):

future.cancel(true);

где true означает, что вы хотите прервать основной поток, который его выполняет.

Следовательно, магазин future в переменной члена при нажатии кнопки запуска, а затем отмените ее, как указано выше, при нажатии кнопки остановки.

Обратите внимание, что вам нужно сделать прерывание обработанной ручки: это не то, что происходит "бесплатно". Прерывание - это кооперативный механизм: код может свободно реагировать на прерывание (или нет).

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