Comment utiliser les variables de classe globales dans Android




www w3 org html (4)

Salut, je fais une application ici. J'utilise des variables de classe globale. Cela fonctionne bien, mais si j'utilise plus de variables de la classe globale, je reçois des exceptions de mémoire quelques fois.

J'ai essayé ceci:

  public class SecondClass extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.second);



    TextView tv = (TextView)findViewById(R.id.tv);
    tv.setText("Global String : " + GlobalClass.myVal);
}
 }


  class GlobalClass extends Application {

   static String myVal;

  }

Est-ce correct ou non?


Première chose, vous n'avez pas besoin de variable statique pour déclarer la variable globale dans la classe d'application,

Changez votre code pour:

class GlobalClass extends Application {

   public String myVal;

  }

puis, où que vous ayez besoin d'accéder à ces données, obtenez l'objet Application en:

GlobalClass global=(GlobalClass)context.getApplication();
global.myVal="anything";

Vous pouvez utiliser comme ça

public class GlobalVar {

    public int getMyVar() {
        return myVar;
    }

    public void setMyVar(int myVar) {
        this.myVar = myVar;
    }

    private int myVar = 0;
    private static GlobalVar instance;

    static {
        instance = new GlobalVar();
    }

    private GlobalVar() {
    }

    public static GlobalVar getInstance() {
        return GlobalVar.instance;
    }

}

alors vous pouvez appeler comme

GlobalVar.getInstance().setMyVar(int);

Jetez un oeil à la publication Singletons vs Application Context dans Android?

Il y a beaucoup de discussions sur les objets Singletons vs Application dans le forum. Je suis personnellement enclin à l'objet Application avec des propriétés. Si vous ne voulez pas garder en mémoire beaucoup d'objets utilisez un LruCache (il y a une implémentation pré-v11 dans le paquet de compatibilité) pour réduire vos besoins en mémoire.

Prenez en compte que vous mangerez la même quantité de mémoire en utilisant Singletons qu'en utilisant l'objet Application, tous les objets seront gardés en mémoire jusqu'à ce que vous les libérez (supprimez toute référence et laissez le GC les effacer de la mémoire).


Vous pouvez également utiliser la classe d'activité Variable globale. Comme par exemple

 public class SecondClass extends Activity {
String S1,S2,S3;
EditText edt1,Edt2,Edt3;
Button btn1,btn2,btn3;
//like this wat Declare all variable you want to use in your Present Activity Class
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
     setContentView(R.layout.second);
edt1= (EditText)findViewById(R.id.tv);
}
}




android-emulator