我正在使用Android SDK实现一个相当标准的应用程序,它涉及使用SurfaceView、SurfaceHolder和Callback进行绘图。
在我的主线程(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经验和大量的调试经验,但无法追踪此问题。
提前致谢。