2010-04-02 173 views
0

我一直在开发利用GLWallpaperService一个动态壁纸,并已得到了全面良好的效果。它在仿真器中运行稳定,看起来不错。我之前已经处理过很多次OpenGL,因此对于如何做事情有着坚实的指令......不幸的是,我有一段时间让这个实际上在实际的硬件上保持稳定。Android动态壁纸:waitForCondition(ReallocateCondition)

基本symption当你进出几次滑动在摩托罗拉Droid物理键盘出现。这会导致壁纸快速连续被破坏/重新创建几次 - 这很好,因为我的资产在onDestroy中清理并在onSurfaceChanged中重新加载。问题是经过几次迭代之后,(可能是四到五次)onSurfaceChanged的调用完全停止,并且我得到了一个打印到日志的无尽字符串:

04-02 00:53:18.088: WARN/SharedBufferStack(1032):waitForCondition(ReallocateCondition)超时(身份= 337,状态= 0)。 CPU可能与挂钩。再试一次。

有什么我应该在这里除了对Android系统的典型onSurfaceCreated/onSurfaceChanged/onSurfaceDestroyed三巨头实现?浏览通过WallpaperService和WallpaperRenderer类不会显示任何明显的东西。

回答

1

我也有类似的问题。错误是,我需要打电话“unlockCanvasAndPost”:

 Canvas c = null; 
    **try {** 
      c = holder.lockCanvas(null); 
      synchronized (holder) { 
       instance.doDraw(c); 
      } 
     **} finally { 
      // do this in a finally so that if an exception is thrown 
      // during the above, we don't leave the Surface in an 
      // inconsistent state 
      if (c != null) { 
       holder.unlockCanvasAndPost(c); 
      } 
     }**