Android : les Champs Statiques et les Fuites de Mémoire

J'ai été l'étude sur les meilleures pratiques pour prévenir le Contexte/l'Activité de la mémoire lors de la création de points de vue, et je n'arrive pas à trouver une réponse précise sur ce qui est ou n'est pas autorisé quand il s'agit de champs statiques dans les classes.

Disons que j'ai un code de ce formulaire:

public class MyOuterClass extends Activity{
   private MyInnerClass;
   MyInnerClass = (MyInnerClass) findViewById(<XML call here>);
   MyInnerClass.myXInt = 3;

   //onCreate(), onResume(), etc.

   public static class MyInnerClass extends SurfaceView implements Runnable{
      //Safe variables?
      private static int myXInt, myYInt;
      private static boolean myBoolean;
      //Potentially safe?
      private static Canvas myCanvas;
      //Definitely bad.
      private static Context myContext;

      public MyInnerClass(Context context){
         myContext = context;        //This is bad.
      }
   }
}

Je suis un peu confus sur ce que la JVM fait estime le chargeur de classe pour MyInnerClass. Techniquement, puisque c'est une SurfaceView objet, il semble que les variables statiques doit toujours exister une fois que la demande a instancié MyInnerClass une seule fois (ce qui arrive lorsque la Vue est d'abord gonflé), puis d'y rester jusqu'à ce que l'application elle-même est terminée. Si c'est le cas, ce qui empêche les Bitmaps et les objets en Toile de rester ouvert et de remplir le tas?

La déclaration que j'ai jamais voir se répéter plus et plus, c'est que vous ne pouvez pas fuite de Contexte statique comme je l'ai montré dans le constructeur, mais il ne va jamais au-delà. Est-ce vraiment la seule chose que vous ne pouvez pas le faire?

votre Canvas etc n'a pas besoin d'être static. De cette façon, il serait, en effet, rester dans le tas pour toujours
Si c'est le cas, alors ce qui empêche les constantes (c-à - private static final int MY_CONSTANT), de la détention d'une classe qui étend la classe de l'activité (et de son contexte) ouvrir?

OriginalL'auteur SeaNick | 2012-08-10