У меня есть активность, которая, кажется, утечка памяти, как показано ниже. Тем не менее, утечка канарейка, похоже, не дает никаких утечек или уведомлений. Если я форсирую сборку мусора, это почти ничего не делает.
В упражнении я динамически создаю изображения и макеты изображений, а затем помещаю их в вид прокрутки. Пример этого ниже:
dynamicUI = new DynamicUI(getApplicationContext());
TextView textViewTitle = dynamicUI.headerTextView(exercises[i].name);
// Horizontal layout with tools icon and exercise time text
LinearLayout layoutTime = new LinearLayout(new ContextThemeWrapper(this, R.style.exercise_info_layout), null, 0);
layoutTime.addView(dynamicUI.iconImage(R.drawable.tools_icon));
layoutTime.addView(dynamicUI.captionTextView(exercises[i].time));
layoutTime.setGravity(Gravity.START | Gravity.CENTER_VERTICAL);
DynamicUI - это класс, который я написал для генерации представлений одинаково во всем приложении. Вот пример метода:
public ImageView iconImage(int id){
ImageView imageView = new ImageView(new ContextThemeWrapper(context, R.style.ButtonImageSmall));
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams((int) (50 * scale), (int) (50 * scale));
lp.setMargins((int) (10*scale), (int) (10*scale), (int) (10*scale), (int) (10*scale));
imageView.setLayoutParams(lp);
imageView.setImageDrawable(context.getResources().getDrawable(id));
return imageView;
}
Есть несколько видов, которые я добавляю к потомку прокрутки:
LinearLayout layoutVertical = dynamicUI.exerciseContainer();
layoutVertical.addView(textViewTitle);
layoutVertical.addView(imageViewCover);
layoutVertical.addView(layoutTime);
layoutVertical.addView(layoutDiff);
scrollLayoutChild.addView(layoutVertical);
Существует довольно много таких раскладок, 1-5 или около того. Они генерируются из базы данных SQLite:
DatabaseHelper db = new DatabaseHelper(getApplicationContext());
Я пытался передать null обоим объектам db и dynamicUI в конце onCreate (), и он, похоже, ничего не делает:
// stop memory leak?
dynamicUI = null;
db = null;