2

这是一个非常简单ActivityActionBar包含单个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。

在此处输入图像描述

4

0 回答 0