Ответ 1
Хм, это будет слишком сложно протекать слишком сильно, ваш класс обслуживания работает в потоке, если вы вызываете stopSelf()
, и, допустим, он является единственным прогоном, поддерживающим MainThread, то он перестанет оставлять два Thread
играть вокруг.
Нити не зависят от Сервиса, поэтому вы используете Volatile
boolean
в своем классе обслуживания, например:
private volatile boolean killThreads = false;//guess in your case this
//flag will be binded to the isChecked of the checkbox or even the
//interface method
когда вы хотите перезапустить команду toggle killThreads = true;, и теперь, когда вы выполняете свои рабочие нагрузки в Threads, вам нужно сделать, если они находятся в цикле, они должны всегда проверять флаг killThreads, если его истинное время его смерти, если не продолжить, если не в цикле, все равно вам нужно постоянно проверяйте этот флаг после каждой основной строки кода
Пример
//in your Service class
private volatile boolean killThreads = false;
//we have jumped to your thread - i am creating a new instance
while(!killThreads){ //if means if this flag is false keep your loop
//hard code comes here
}
//or if you are not running a loop
//in your run method you can constantly check for this flag like
for(int i =0; i < 100; i++){
if(killThreads){
break;//or return if you like
}
//rest of the code
}
//after the loop you can also check again
if(killThreads){
return;
}
просто проверьте флаг после конкретных строк кода
теперь в вашей деятельности
//In the settings activity of my app
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
// Change shared preferences to make the process enabled
//what you do here is you update killThreads with the isChecked
//so find a way to bind your bind your Activity to Service class
//there are tons of example on here
Надеюсь, что это поможет