Also mache ich ein Spiel und habe drei Dinge, die möglicherweise gleichzeitig ausgeführt werden müssen.Nebenläufigkeit mit Android
showDamage - zeigt eine Nummer (in einem TextView) für einen kurzen Moment (~ 300 Millisekunden) und verschwindet dann.
Verzögerung - zum Halten eines temporären Boosts. Ein TextView wird auch am Anfang und am Ende aktualisiert. Das ist lang (~ 10 Sekunden).
Abklingzeit - gibt dem Benutzer eine Text-Rückmeldung über die verbleibende Zeit, bis eine Taste erneut gedrückt werden kann.
Ich habe einige Browsing und, nach dem Versuch, einen Handler, der andere Ereignisse blockiert, kam zu der allgemeinen Meinung, dass ich ASyncs als eine einfache Möglichkeit verwenden sollte, um gleichzeitige Threads, die Änderungen an der Benutzeroberfläche machen und Aufgaben ohne Blockierung der tun machen Haupt-Bedroung. Also habe ich alle 3 als Asyncs implementiert. Ich kam dann auf ein Problem, bei dem sie sich gegenseitig stören würden - die Zahlen von der ShowDamage würden länger als 300ms hängen bleiben, die temporären Effekte würden dauerhaft werden (die postExecution wurde nie ausgeführt). Weiteres Browsen schlug vor, dass Android standardmäßig eine Poolgröße von 5 hat und ich somit nur 5 Asyncs laufen lassen konnte. Die Verwendung von MyASync.executeOnExecutor (AsyncTask.THREAD_POOL_EXECUTOR, ...) hilft zwar ein wenig, bietet aber Parallelität und keine Parallelität.
Ich habe einen CountdownTimer für Cooldown verwendet und das scheint das Problem mit den temporären Effekten gestoppt zu haben, aber die TextViews von showDamage hängen immer noch, wenn genug Spam ist. Gibt es dafür eine Lösung, und gibt es irgendwelche Versuche, die ich wahrscheinlich falsch implementiert habe?