我正在使用 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 经验,以及大量的调试经验,但无法追踪到这一点。
提前致谢。