Android动态壁纸:waitForCondition(ReallocateCondition)

时间:2010-04-02 06:10:22

标签: android opengl-es

我一直在使用GLWallpaperService开发动态壁纸,整体上取得了不错的效果。它在模拟器中运行坚如磐石,看起来很棒。我之前已多次处理OpenGL,因此对如何做事情有了坚实的掌握......不幸的是,我有一段时间让它真正在实际硬件上保持稳定。

当您在Motorola Droid上滑动物理键盘几次时,会出现基本问题。这会导致壁纸快速连续几次被销毁/重建 - 这很好,因为我在onDestroy中清理资源并在onSurfaceChanged中重新加载。问题是经过几次迭代后,(可能是四个或五个)对onSurfaceChanged的调用完全停止,我得到一个无限的字符串打印到日志中:

04-02 00:53:18.088:WARN / SharedBufferStack(1032):waitForCondition(ReallocateCondition)超时(identity = 337,status = 0)。 CPU可以挂钩。再试一次。

除了Android典型的onSurfaceCreated / onSurfaceChanged / onSurfaceDestroyed triumvirate之外,我应该在这里实现一些东西吗?浏览WallpaperService和WallpaperRenderer类并没有向我显示任何明显的内容。

1 个答案:

答案 0 :(得分: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);
            }
        }**