私はUIから要素を参照するときに、すべてのアクティビティに対してこれを行っています。クラス変数を作成します。これは、時には10個のにつながることができます - ちょうどUI要素のための20クラス変数:Android: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 //);
}
}
を、私は時々、彼らが代わりにこれを行うだろう他の人のコードを見て、観察している:
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) {
}
});
}
}
です2番目の方法はより効率的なメモリですか?クラス変数の厳密な参照がなくなり、ガベージコレクションがより簡単に実行できます。しかし、私は、第2の方法を使用することのリスクが何であるか不思議です。アプリ使用時にガベージコレクションが発生した場合は、addComment linearLayout
のクリック機能が失われますか?
私はアプリのメモリ使用を最適化する方法を試しています。
ありがとうございました - 私は、第2の方法がメモリ効率が良く、実際には第2の方法のように見えるようにすべての参照を実際に変更しようとしているという認識を持っていました。 – Simon
@Simon:あとでフィールドを使用する予定の場合は、フィールド内のウィジェットを持っているだけです。フィールドが使用されている1つだけのスポットであれば、2番目のアプローチに切り替えるか、ローカル変数を使用します。明らかに*悪い*は、findViewById()を何度も呼び出して、同じウィジェットを取得し続けることです。これにはCPUとヒープの断片化コストがあります。 – CommonsWare