Ich habe dies für alle meine Aktivitäten getan, wenn ich ein Element von meiner Benutzeroberfläche referenziere, ich erstelle eine Klassenvariable. Dies kann manchmal bis 10 führen - 20 Klassenvariablen nur für UI-Elemente:Android: Referenzen zu 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 //);
}
}
Jetzt habe ich beobachtet, in anderen Leute Code suchen, manchmal würden sie dies tun, anstatt:
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) {
}
});
}
}
Ist zweite Methode mehr Speicher effizient? Es gibt keine starke Referenz für die Klassenvariable mehr und daher kann die Speicherbereinigung leichter erfolgen. Aber ich frage mich nur, was das Risiko der Verwendung der zweiten Methode ist. Wenn die Garbage Collection bei der Verwendung der App erfolgt, verliert die addComment linearLayout
ihre Klickfunktionalität?
Ich versuche nur, den Speicherverbrauch meiner App zu optimieren.
Dank - ich hatte diese Wahrnehmung, dass die zweite Methode mehr Speicher effizienter war und war eigentlich im Begriff, alle meine Referenzen zu ändern, um stattdessen wie die zweite Methode aussehen. – Simon
@Simon: Nun, halten Sie sich nur an einem Widget in einem Feld fest, wenn Sie das Feld später verwenden möchten. Wenn dies der einzige Ort ist, an dem das Feld verwendet wird, wechseln Sie entweder zum zweiten Ansatz oder verwenden Sie eine lokale Variable. Was entschieden * schlimmer ist, ist, 'findViewById() 'immer wieder aufzurufen und das gleiche Widget abzurufen. Das hat CPU- und Heapfragmentierungskosten. – CommonsWare