Android的SurfaceHolder.unlockCanvasAndPost()不会导致重绘

我正在实现一个相当标准的应用程序与Android SDK涉及绘图使用SurfaceView,SurfaceHolder,callback设置。

在我的主线程(UI线程)中,我没有绘制或处理SurfaceHolder(或使用它检索的canvas)。

在一个单独的线程中,我有以下几点:

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); } } 

这段代码正在执行,不会抛出exception,并且没有我能find的负面影响; 然而,unlockCanvasAndPost()调用永远不会导致onDraw()被调用。

换句话说,unlockCanvasAndPost()不会导致SurfaceView的重绘。

任何想法可能会导致这种症状? 我有大量的Java经验,相当数量的Android经验,以及大量的debugging经验,无法跟踪这一点。

提前致谢。

Solutions Collecting From Web of "Android的SurfaceHolder.unlockCanvasAndPost()不会导致重绘"

所以事实certificate,使用SurfaceView时,你可以绘制到一个窗口下面的Surface。 我在xml中设置View的背景颜色; 事实certificate,设置窗口的背景颜色,而不是表面。 实际上,我使窗口不透明,以至于看不到下面的表面。

学过的知识。

这不是SurfaceView的工作原理。 调用unlockCanvasAndPost()不会调用onDraw(),这就是使用SurfaceView的重点。 SurfaceView的表面生活在不同的窗口中。

这是旧的,但我有一个感觉问题是没有水口callback。 在表面创build之前,他正试图绘制表面