Sto implementando un'applicazione abbastanza standard con il sdk Android che implica il disegno utilizzando SurfaceView, SurfaceHolder, configurazione Callback.Android SurfaceHolder.unlockCanvasAndPost() non causa il ridisegno
Nel mio thread principale (thread UI) non ho disegno o gestione di SurfaceHolder (o della tela che si recupera con esso).
In un thread separato ho il seguente:
Log.i("GAME.DrawThread", "run()");
Log.i("GAME.DrawThread", Thread.currentThread().getName());
Canvas canvas = null;
try {
canvas = holder.lockCanvas();
synchronized(holder) {
Log.i("GAME", "draw():synchronized");
Paint paint = new Paint();
paint.setColor(R.color.draw_color);
canvas.drawColor(R.color.draw_color);
canvas.drawLine(0, 0, 500, 500, paint);
}
} catch (SurfaceHolder.BadSurfaceTypeException e) {
Log.e("GAME", "onDraw(): BadSurfaceTypeException");
} finally {
if (canvas != null) {
holder.unlockCanvasAndPost(canvas);
}
}
viene eseguito questo codice, getta senza eccezioni, e non ha effetti collaterali negativi che posso trovare; tuttavia, la chiamata unlockCanvasAndPost() non causa mai la chiamata a onDraw().
In altre parole, unlockCanvasAndPost() non causa un ridisegno di SurfaceView.
Qualche idea su cosa potrebbe causare questo sintomo? Ho un sacco di esperienza java, una buona dose di esperienza Android, e un sacco di esperienza di debug e non riesco a rintracciare questo.
Grazie in anticipo.
Questo codice ora si blocca su Android 4.3 –