2011-05-27 3 views
0
private void startGameTimeElapseThread(){ 
    new Thread(new Runnable() { 
     Date d = new Date(); 
     public void run() { 
      while (true){ 
       try { 
        synchronized (this) { 
         this.wait(1000);  
        } 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
       postInvalidate(); 
      } 
     } 
    }).start(); 
} 

Lorsque j'exécute la méthode ci-dessus, l'erreur ci-dessous s'affiche.Android Erreur de mémoire insuffisante lorsque postInvalidate

05-27 08:52:56.910: ERROR/AndroidRuntime(12715): FATAL EXCEPTION: main 
05-27 08:52:56.910: ERROR/AndroidRuntime(12715): java.lang.OutOfMemoryError: bitmap size exceeds VM budget 

Est-ce que quelqu'un a une idée de comment rafraîchir l'écran toutes les secondes sans avoir cette erreur? (dans le canevas, j'y dessine un bitmap .Cela indique que bitmap provoque cette erreur)

+0

Quelle est la taille du bitmap? Aussi, je pense que l'exemple de MoonLander avait la bonne façon de le faire. –

+0

Salut Dinesh, Est-il possible pour vous d'afficher l'ensemble du code de sorte que nous irons bien que –

Répondre

0

Il y a une fuite de mémoire dans votre application. postInvalidate() provoque la redéfinition de l'ensemble ViewGroup. Il est possible qu'une référence faible à votre bitmap reste quelque part, ou qu'une faible référence à une activité/vue soit présente dans le tas que le GC ne peut pas libérer.

Puisque vous n'avez pas posté beaucoup de code, here is a link sur la façon de tracer les fuites dans votre application.

+0

J'ai réussi à y arriver avec l'appel System.gc. Thankx – dinesh707