1
我一直在爲我所有的活動做這件事,當我從UI中引用一個元素時,我創建了一個類變量。這有時會導致10 - 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) {
}
});
}
}
是的第二種方法更高效的內存?不再有強類型變量的類變量,因此垃圾回收可以更容易發生。但我只是想知道使用第二種方法的風險是什麼。如果在使用應用程序時發生垃圾回收,那麼addComment linearLayout
會失去其點擊功能?
我只是想方法來優化我的應用程序的內存使用。
謝謝 - 我有這種感覺,第二種方法更有記憶效率,實際上即將改變我所有的引用,看起來像第二種方法。 – Simon
@Simon:好的,如果你打算以後再使用這個域,那麼只需要在域中保留一個小部件。如果這是使用該字段的唯一地點,則切換到第二種方法或使用局部變量。什麼決定*更糟糕的是繼續調用'findViewById()'一遍又一遍,檢索相同的部件。這具有CPU和堆碎片成本。 – CommonsWare