SurfaceView、SurfaceHolder、Callback セットアップを使用した描画を含むかなり標準的なアプリを Android SDK で実装しています。
私のメイン スレッド (UI スレッド) では、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の経験もかなりあり、デバッグの経験も豊富で、これを追跡することはできません.
前もって感謝します。