我面临一个非常奇怪的问题。我有一个Activity
,ActionBar
包含一个自定义视图。
如果我像这样加载这个自定义视图的 XML:
LayoutInflater inflater = LayoutInflater.from(this);
ViewGroup vg = (ViewGroup) inflater.inflate(R.layout.action_search_form,null);
它泄漏:活动不是 GC'd。以下修复有效(为什么?):
LayoutInflater inflater = LayoutInflater.from(getApplicationContext());
但是,如果我OnClickListener
在子视图上设置 a ,它会再次泄漏:
ImageButton clear = (ImageButton) vg.findViewById(...);
clear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Even if empty
}
});
}
所有这些都发生在活动的私有方法中,所有视图都是局部变量。
我找到了一个修复方法,但不明白它为什么起作用:视图很简单,所以我用 Java 编写了它,而不是夸大 XML。我怀疑这与没有上下文传递给 LayoutInflater 并且 Activity 本身没有发生任何事情有关,但是如果有人可以帮助我理解发生了什么,我将不胜感激。