2010-04-02 3 views
0

J'ai développé un fond d'écran en direct en utilisant GLWallpaperService, et j'ai obtenu de bons résultats dans l'ensemble. Il fonctionne parfaitement dans l'émulateur et a l'air bien. J'ai traité avec OpenGL plusieurs fois auparavant, donc j'ai une bonne idée de la façon de faire les choses ... malheureusement, j'ai un bon moment pour que cela soit stable sur le matériel.Android Live Wallpaper: waitForCondition (ReallocateCondition)

La symphonie de base se produit lorsque vous faites glisser le clavier physique sur un Motorola Droid à plusieurs reprises. Cela provoque la destruction/recréation répétée du fond d'écran plusieurs fois de suite - ce qui serait bien, car mes actifs sont effacés dans onDestroy et rechargés dans onSurfaceChanged. Le problème est après quelques itérations de ceci, (quatre ou cinq, peut-être) les appels à onSurfaceChanged arrêtent complètement, et j'obtiens une chaîne sans fin de ceci imprimée au journal:

04-02 00: 53: 18.088: WARN/SharedBufferStack (1032): waitForCondition (ReallocateCondition) a expiré (identity = 337, status = 0). L'UC peut être indexée. essayer à nouveau.

Y a-t-il quelque chose que je devrais mettre en œuvre ici en dehors du triumvirat onSurfaceCreated/onSurfaceChanged/onSurfaceDestroyed typique d'Android? La navigation à travers les classes WallpaperService et WallpaperRenderer ne me fait pas apparaître quelque chose d'évident.

Répondre

1

J'ai eu un problème similaire. L'erreur était que j'avais besoin d'appeler "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); 
      } 
     }**   
Questions connexes