Начать и прервать и снова запустить поток
Я начал тему, когда активность создана в 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
в переменной члена при нажатии кнопки запуска, а затем отмените ее, как указано выше, при нажатии кнопки остановки.
Обратите внимание, что вам нужно сделать прерывание обработанной ручки: это не то, что происходит "бесплатно". Прерывание - это кооперативный механизм: код может свободно реагировать на прерывание (или нет).