Предполагая, что Drawer
является потоком, вы не можете запустить его дважды: "Никогда не разрешается запускать поток более одного раза" . Ваши основные предположения о том, как написать этот код, ошибочны.
Я бы предложил не использовать темы напрямую. Вместо. Используйте ExecutorService
, например:
ExecutorService executor = Executors.newFixedThreadPool(1);
Затем отправьте работу в этот пул в onClickListener вашей кнопки запуска:
future = executor.submit(runnable);
где runnable
- это работа, которую вы хотите сделать.
Возвращенный Future
- это вещь, которая передает результат выполнения runnable
, но также позволяет вам делать такие вещи, как отмена (т. Е. Попросить прекратить выполнение):
future.cancel(true);
где true
означает, что вы хотите прервать основной поток, который его выполняет.
Следовательно, сохраняйте future
в переменной-члене при нажатии кнопки запуска, а затем отменяйте ее, как указано выше, при нажатии кнопки остановки.
Обратите внимание, что вам нужно сделать прерывание работоспособной ручки: это не то, что происходит "бесплатно". Прерывание - это кооперативный механизм: код может свободно реагировать на прерывание (или нет).