Schnelles Bildschirmflimmern, während NICHT auf Android OpenGL gezeichnet wird

Ich wollte die Lebensdauer der Batterie verlängern. Meine App muss nur manchmal gezeichnet werden. Deshalb habe ich meinem Renderer diesen Code in der onDraw-Methode hinzugefügt:

boolean dirty = true;

public void onDrawFrame(GL10 arg0) {
    if (!dirty) return;
    dirty = false;

    ..... draw images ....
}

So wird meine App nur gezeichnet, wenn ich es will. Aber was passiert ist, dass wenn ich meine App nicht auf jeden Frame ziehe, sie sehr schnell flackert. Es sieht so aus, als würde es jeden 2. Frame oder so gezeichnet, und in allen anderen Frames wird nur ein schwarzer Bildschirm gezeichnet.

Ich weiß, dass ich den Render-Modus auf @ setzen könnRENDERMODE_WHEN_DIRTY. Aber ich möchte keinen weiteren Thread erstellen, um zu überprüfen, ob er verschmutzt ist oder nicht.

Meine Frage ist, warum flackert es? Ich rufe keine Methoden oder GLES20-Aufrufe auf, bevor ich meine Prüfung durchführe:if (!dirty) return; und ich bin sicher, dass dasboolean dirty ändert sich nicht und ist mit Ausnahme des ersten Frames immer falsch.

BEARBEITEN

Ich habe meinen Code folgendermaßen geändert:

int dirty = 0;

public void onDrawFrame(GL10 arg0) {
    if (dirty > 1) return;
    dirty++;

    ..... draw images ....
}

Dies stoppt das Flackern! Sieht so aus, als müssten Sie mindestens 2 Mal zeichnen, damit dieser seltsame Bildschirm nicht flackert. Wie auch immer, ich werde jetzt versuchen, die sauberere Methode zu verwenden und einen Thread zu erstellen, der @ aufrufrequestRender() wenn ich etwas zeichnen und meinen Rendermodus auf @ setzen möchRENDERMODE_WHEN_DIRTY

Antworten auf die Frage(4)

Ihre Antwort auf die Frage