Я реализую довольно стандартное приложение с Android sdk, которое включает рисование с использованием SurfaceView, SurfaceHolder, настройки обратного вызова.
В моем основной поток (поток пользовательского интерфейса) У меня нет рисования или обработки SurfaceHolder (или холста, который вы извлекаете с ним).
В отдельном потоке у меня есть следующее:
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);
}
}
Этот код выполняется, не выдает никаких исключений, и не имеет никаких негативных побочных эффектов, которые я могу найти; однако вызов unlockCanvasAndPost () никогда не вызывает вызова onDraw ().
Другими словами, unlockCanvasAndPost () не вызывает перерисовку SurfaceView.
Есть идеи, что могло вызвать этот симптом? У меня большой опыт работы с Java, достаточный опыт работы с Android и большой опыт отладки, и я не могу отследить это.
Заранее спасибо.