我有一個應用程序具有約150編輯文本和一個mainActivity的onClickListener爲每個這些editTexts和一個按鈕,通過它們遍歷它們並清除它們。使用許多editTexts和onclicklisteners運行內存不足
應用程序運行良好,並沒有做任何顯著的變化,我現在得到以下logcat的錯誤每次我啓動的應用程序:
Out of memory on a 2903056-byte allocation.
是否有任何明顯的不良做法,我在這裏做什麼是造成內存丟失?
一些下面我的代碼說明(這是重複顯然很多次)
box0101.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
txtHint.setText(hintPrefix + onOneClick);
return false;
}
});
box0301.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
txtHint.setText(hintPrefix + onOneClick);
return false;
}
});
box0401.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
txtHint.setText(hintPrefix + onOneClick);
return false;
}
});
box0501.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
txtHint.setText(hintPrefix + onOneClick);
return false;
}
});
box0601.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
txtHint.setText(hintPrefix + onOneClick);
return false;
}
});
,也掀起了一些循環
btnClear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
clearBoard();
}
});
public void clearBoard() {
final int ROW_COUNT = 14;
final int COL_COUNT = 9;
final String ROWS[] = {"01","02","03","04","05","06","07","08","09","10","11","12","13","14","15"};
final String COLS[] = {"01","02","03","04","05","06","07","08","09","10"};
for(int i=0; i<ROW_COUNT; i++) {
for(int j=0; j<COL_COUNT; j++) {
String a = ROWS[i];
String b = COLS[j];
int editTextId = getResources().getIdentifier("box" + a + b , "id", getPackageName());
EditText et=(EditText)findViewById(editTextId);
et.setText("");
}
}
}
A 2903056字節分配可能不是由'EditText's造成的 - 使用類似[MAT]的內存分析器(http://android-developers.blogspot.de/2011/03/memory-analysis-for-android。 HTML)來檢查你的問題在哪裏。另外,一個'ListView'或類似的東西,並不需要你的代碼中有150個'box1234'變量。 – zapl
嘗試僅爲所有EditText對象使用一個OnClickListener。只需在裏面放置一個開關盒,並處理不同的調用者(EditText)。它將消除View.OnClickListener()的150個對象。 二,在日食中乾淨和重新構建你的項目。有時候eclip會爲你的包裝做奇怪的事情,所以它很奇怪。 –
我同意@ alex.veprik,但我不明白爲什麼你會希望在單一活動中有這麼多。我不知道你的程序是什麼,所以它可能是有效的,但對於用戶來說,處理和管理代碼似乎很重要。如果可能的話,你可以考慮把它們分開...只是一個想法 – codeMagic