2010-04-02 5 views
0

저는 GLWallpaperService를 사용하여 라이브 배경 화면을 개발 해왔고 전반적으로 좋은 결과를 얻었습니다. 그것은 에뮬레이터에서 견고한 상태로 실행되고 잘 보입니다. 저는 OpenGL을 여러 번 다루기 전에 여러 가지 방법에 대한 확실한 명령을 받았습니다 ... 불행히도 실제 하드웨어에서 실제로 안정화되는 시간을 가질 수는 있습니다.Android Live Wallpaper : waitForCondition (ReallocateCondition)

Motorola Droid에서 실제 키보드를 몇 번 밀어 넣거나 뺄 때 기본 동작이 발생합니다. 이로 인해 벽지가 빠르게 연속으로 여러 번 파괴/재 작성됩니다. 이는 onDestroy에서 자산을 지우고 onSurfaceChanged에서 다시로드 할 때 유용합니다. 문제는 onSurfaceChanged에 대한 호출이 완전히 멈추고 (4 ~ 5 회 정도) 반복되어 로그에 다음과 같이 끝나는 문자열이 인쇄됩니다.

04-02 00 : 53 : 18.088 : WARN/SharedBufferStack (1032) : waitForCondition (ReallocateCondition)이 시간 초과되었습니다 (identity = 337, status = 0). CPU가 고정되어있을 수 있습니다. 다시 시도하십시오.

안드로이드의 전형적인 onSurfaceCreated/onSurfaceChanged/onSurfaceDestroyed triumvirate를 제외하고 여기서 구현해야하는 것이 있습니까? 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); 
      } 
     }**