Я не уверен в необходимости создания нового потока каждый раз, когда изменяется ход выполнения, лучшим подходом может быть создание окончательного runnable, в котором вы меняете целочисленное значение:
onProgressChange:
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) {
toRun.interval = progress;
}
Runnable-реализация:
class StrobeRunnable implements Runnable {
volatile boolean running;
volatile int interval = 0;
private boolean lightIsOn = false;
@Override
public void run() {
while(running){
if (interval > 1){
Thread.sleep(300/interval);
lightIsOn = !lightIsOn;
switchLight(lightIsOn);
}
else{
Thread.sleep(600/interval);
if( !lightIsOn ){
lightIsOn = true;
switchLight(lightIsOn);
}
}
}
}
};
Обратите внимание, что я создал новые имена для некоторых методов, switchLight (boolean isLightOn) - это то, что, как я полагаю, выполнял ваш processXClick ранее, а именно: включите или выключите свет,И интервал раньше назывался myInt.
Чтобы запустить поток, я предпочитаю использовать Executors:
StrobeRunnable toRun = new StrobeRunnable();
Executor exec = Executors.newSingleThreadExecutor();
exec.execute(toRun);
Чтобы полностью остановить запуск потока, установите toRun.running в false, иэто остановит рабочий цикл.
Я не проверял это, но он должен работать.Это также немного зависит от того, как выглядит ваш processClick-метод.