Android SurfaceView / Canvas piscando depois de tentar limpá-lo

Então, estou tentando limpar a tela usando canvas.drawColor (Color.BLACK), mas se eu chamar isso apenas uma vez, a tela pisca e exibe o desenho antigo que deveria ter sido coberto pela drawColo

Aqui estão os bits importantes do meu código -

// This method is called by a Thread                
public void update() {
    Canvas canvas = holder.lockCanvas(null);
    if (canvas != null) {
        onDraw(canvas);
    }
    holder.unlockCanvasAndPost(canvas);
}

@Override
protected void onDraw(Canvas canvas) {

    if (toClear) {
        canvas.drawColor(Color.BLACK);

        //if this is not set to change back to false, it does not flicker
        toClear = false;
    }

    //Draw some objects that are moving around
}

public void clearScreen() {     
    // This method is called when the user pressed a button
    toClear = true;
}

Depois de pesquisar em um litte, ouvi falar em buffer duplo, mas cheguei ao entendimento de que lockCanvas () e unlockCanvasAndPost () deveriam lidar com isso para mim. O que há de errado aqui

questionAnswers(3)

yourAnswerToTheQuestion