使用 getApplicationContext() 创建图像视图会导致内存泄漏吗?

Can creating imageviews with getApplicationContext() lead to memory leaks?

我有一个 activity 似乎正在泄漏内存,如下所示。然而,泄漏金丝雀似乎没有给出任何泄漏或通知。如果我强制进行垃圾回收,它几乎什么都不做。

在 activity 中,我正在动态创建图像视图和布局,然后将它们放入滚动视图中。下面是一个例子:

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 是我编写的 class 以在整个应用程序中以相同方式生成视图。这是一个示例方法:

    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());

我已经尝试在 onCreate() 结束时将 null 赋给我的 db 和 dynamicUI 对象,但它似乎没有做任何事情:

// stop memory leak?
dynamicUI = null;
db = null;

您永远不应使用应用程序上下文来创建视图。您应该使用显示视图的 activity 的 Activity 上下文。那是因为视图的范围是 activity 我不知道那是你的内存泄漏,但这绝对是一个可能导致奇怪行为的错误。至少它的主题和资源可能不正确。