Ich habe eine AsyncTask ausgeführt und in diesem Thread starte ich einen runOnUiThread, um meine Ansichten zu manipulieren. Wenn ich meine AsyncTask schließe, läuft RunOnUiThread noch 1 Mal länger, nachdem ich meine AsyncTask geschlossen habe. Wie kann ich den runOnUiThread schließen? Vielen Dank!Schließen runOnUiThread
@Override
protected String doInBackground(String... params) {
while(running.get()) {
// Background thread sleeps
try {
Thread.sleep(produceRadwaste_countdown * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// UI thread touching some view elements
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
radwasteTon.incrementStack();
}
});
// Delete thread if player is game over
if(GameLogic.isGameOver()) {
clearThreads();
}
}
return "Running";
}
public void clearThreads() {
running.set(false);
this.cancel(true);
}
Dank es funktioniert auf der Benutzeroberfläche und ich brauche nicht die runOnUiThread, aber es läuft noch 1 mal nach dem Abbrechen des Threads – Ghork
Okay, ich überprüfte den gesamten Prozess mit logcat und es war ein bisschen komisch, weil manchmal er ausführt publishProgress(), bevor er das Spiel über boolean überprüft hat und manchmal prüft er den booleschen Wert, bevor er publishProgress() ausführt. Jetzt mache ich ein wenig Thread.sleep zwischen diesen beiden Operationen und es funktioniert, aber ich denke, das ist nicht die beste Lösung. – Ghork
Ich habe gelesen, dass AsyncTask eine maximale Poolgröße hat und es wäre eine sehr schlechte Sache für mein Spiel, weil dieser Thread auf jedem Spielsymbol läuft und ich ungefähr 5 - 10 Elemente haben werde. – Ghork