Eine mögliche Lösung ist, durch den Schalter Synchronisieren über Display.callSerially(). Das Flimmern wird wahrscheinlich dadurch verursacht, dass die App versucht, auf den Bildschirm zu zeichnen, während der Wechsel des Canvas noch andauert. callSerial() soll warten, bis das Repaint beendet ist, bevor versucht wird, run() erneut aufzurufen.
Aber das hängt ganz vom Telefon ab, da viele Geräte callSerial() nicht implementieren, geschweige denn die in der offiziellen Dokumentation aufgeführte Implementierung. Die einzigen Geräte, von denen ich wusste, dass sie mit callSerial() funktionieren, waren Siemens-Telefone.
Ein weiterer möglicher Versuch wäre, eine Thread.sleep() von etwas wie 1000 ms zu setzen, um sicherzustellen, dass Sie Ihre setCurrent() Methode vorher aufgerufen haben. Auf diese Weise kann das Gerät die Änderung vor den anzeigbaren Versuchen zum Zeichnen vornehmen.
Das wahrscheinlichste Problem ist, dass es ein Geräteproblem ist und die garantierte Lösung für das Flimmern ist einfach - verwenden Sie ein Canvas. Wahrscheinlich nicht, was du hören wolltest. :)
Ich verwende die doppelte Pufferung, indem ich einen Offscreen-Puffer mit einer ähnlichen Methode wie Ihre definiere. Das Flackern tritt immer auf, wenn der Hauptthread des neuen Canvas gestartet wird. – Dimitris