2010-04-02 168 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); 
      } 
     }**