Я создал ListView. Каждый из элементов ListView содержит ToggleButton, , который запускает или останавливает поток в службе.Служба Android с несколькими темами
Нити должны работать до тех пор, пока активируются кнопки toggleButtons. Если действие прекращается, служба и активированные потоки должны быть продолжены.
//In MainActivity
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
Intent intent = new Intent(context,MyService.class);
intent.putExtra("id",listviewPosition);
startService(intent);
}
//MyService
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// Thread(startId) starten
HandlerThread thread = new HandlerThread(String.valueOf(startId));
thread.start();
// Threads looper holen und beim servicehandler benutzen
serviceHandler = new ServiceHandler(thread.getLooper());
listServericeHandler.add(serviceHandler);
//message ausm pool holen
Message msg = serviceHandler.obtainMessage();
msg.arg1 = startId;
serviceHandler.sendMessage(msg);
return START_STICKY;
}
private final class ServiceHandler extends Handler {
public ServiceHandler(Looper looper) {
super(looper);
}
@Override
public void handleMessage(Message msg) {
while (continueUntilToggleButtonIsDeactivated) {
Log.d(MainActivity.TAG, "Thread " + tring.valueOf(msg.arg1)
+ " running: " + url.toExternalForm());
synchronized (this) {
try {
//do stuff
wait(1000);
} catch (Exception e) {
}
}
}
}
}
Итак, я пытаюсь начать нить в OnStartCommand()
каждый раз, когда я активировать ToggleButton.
Что я не знаю, так это то, как остановить потоки и выйти из цикла while.
В декларации времени цикла является 'continueUntilToggleButtonIsDeactivated' переменного, или просто ваше объяснения? Если это переменная, то где вы ее устанавливаете? – RocketSpock
Это должно быть какое-то объяснение. im попытался установить переменную при вызове onCheckedChanged, но я не могу обрабатывать несколько потоков таким образом. – MaffelBaffel
^Нужна эта информация, чтобы помочь. Как вы обрабатываете флаг 'continueUntilToggleButtonIsDeactivated'. Установите его на false, когда вы остановите поток –