Je l'ai fait pour toutes mes activités lorsque je référence un élément de mon interface utilisateur, je crée une variable de classe. Cela peut parfois conduire à 10 - 20 variables de classe juste pour les éléments de l'interface utilisateur:Android: références à findViewById
public class CommentActivity extends AppCompatActivity {
LinearLayout addComment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_comment);
addComment = (LinearLayout) findViewById(R.id.addcomment);
addComment.setOnClickListener(// add an onclick listener here //);
}
}
Maintenant, je l'ai observé en regardant le code des autres que, parfois, ils le feraient à la place:
public class CommentActivity extends AppCompatActivity {
// LinearLayout addComment; no more reference to class variable
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_comment);
//they just findViewById and add on the onclick listener
findViewById(R.id.addcomment).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
}
}
Est-ce le deuxième méthode plus de mémoire efficace? Il n'y a plus de référence forte de variable de classe et donc la collecte de place peut se faire plus facilement. Mais je me demande simplement quel est le risque d'utiliser la seconde méthode. Si la récupération de place se produit lors de l'utilisation de l'application, le addComment linearLayout
perd-il sa fonctionnalité de clic? J'essaie juste d'optimiser l'utilisation de la mémoire de mon application.
Merci - J'ai eu cette perception que la seconde méthode était plus efficace en mémoire et était sur le point de changer toutes mes références pour ressembler à la seconde méthode à la place. – Simon
@Simon: Eh bien, ne vous occupez que d'un widget dans un champ si vous prévoyez d'utiliser le champ plus tard. Si c'est le seul et unique endroit où le champ est utilisé, passez à la seconde approche ou utilisez une variable locale. Ce qui est décidément * pire * est de continuer à appeler 'findViewById()' encore et encore, en récupérant le même widget. Cela a des coûts de fragmentation CPU et tas. – CommonsWare