这是一个非常简单Activity
的ActionBar
包含单个MenuItem
“搜索”的内容。我想为搜索按钮设置一个 ActionView,并使用它MenuItem.setActionView(int ResId)
来传递 XML 布局。膨胀我想要MenuItem
作为操作视图附加到的布局。
简单的button
开始完全相同Activity
。在开发选项中设置了“不保留活动”。
问题:在操作视图中的小部件上设置 OnClickListener 后,MainActivity
永远不会被垃圾收集(参见下面的 MAT)。但是,如果我在 java 中创建视图层次结构(而不是膨胀它),它应该是 GC。
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Button button = new Button(this);
button.setText("Click");
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity.this, MainActivity.class);
startActivity(i);
}
});
setContentView(button);
}
@SuppressLint("NewApi")
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuItem searchIcon = menu.add("search");
searchIcon.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
// I set the ActionView here:
searchIcon.setActionView(R.layout.action_search_form);
ViewGroup vg = ((ViewGroup)searchIcon.getActionView());
ImageButton btn = (ImageButton)vg.findViewById(R.id.search_clear_btn);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "click", Toast.LENGTH_SHORT).show();
}
return true;
}
}
对象的数量与我单击button
. 如果我删除onCreateOptionsMenu()
块,对象的数量不完全是 1,但总是低于 10。