我一直在使用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类并没有向我显示任何明显的内容。
答案 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);
}
}**