Estoy implementando una subclase SurfaceView, donde ejecuto un hilo separado para dibujar en un lienzo SurfaceHolders. Estoy midiendo el tiempo antes y después de llamar al lockCanvas()
, y estoy obteniendo de aproximadamente 70 ms a 100 ms. ¿Alguien podría indicarme por qué estoy recibiendo horarios tan altos? Aquí la parte pertinente del código:¿Por qué es lento LockCanvas()?
public class TestView extends SurfaceView implements SurfaceHolder.Callback {
....
boolean created;
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
mThread = new DrawingThread(mHolder, true);
mThread.onWindowResize(width, height);
mThread.start();
}
public void surfaceCreated(SurfaceHolder holder) {
created = true;
}
public void surfaceDestroyed(SurfaceHolder holder) {
created = false;
}
class DrawingThread extends Thread {
public void run() {
while(created) {
Canvas canvas = null;
try {
long t0 = System.currentTimeMillis();
canvas = holder.lockCanvas(null);
long t1 = System.currentTimeMillis();
Log.i(TAG, "Timing: " + (t1 - t0));
} finally {
holder.unlockCanvasAndPost(canvas);
}
}
Ok, gracias. Ya lo he leído antes y entiendo los conceptos. Pero todavía no encuentro una solución. Incluso si elimino el bloque 'synchronized' (que no se recomienda), no me ayuda. Aún esos tiempos altos. – kaneda