Android SurfaceHolder.unlockCanvasAndPost () не вызывает перерисовку

Я реализую довольно стандартное приложение с 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 и большой опыт отладки, и я не могу отследить это.

Заранее спасибо.

9
задан cblades 29 September 2010 в 02:10
поделиться