其他分享
首页 > 其他分享> > android – 从活动创建新的menuInflater或getMenuInflater()?

android – 从活动创建新的menuInflater或getMenuInflater()?

作者:互联网

我正在片段内创建新的选项菜单但是在阅读之后
http://developer.android.com/resources/articles/avoiding-memory-leaks.html
说上下文应用比上下文活动更好,我害怕使用getActivity().getMenuInflater()

所以,实际上哪一个更好

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    MenuInflater mInflater = new MenuInflater(getActivity().getApplicationContext());
    mInflater.inflate(R.menu.simple_menu, menu);
}

或者一个电话活动

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    MenuInflater mInflater = getActivity().getMenuInflater();
    mInflater.inflate(R.menu.simple_menu, menu);

}

那两个人之间的区别是什么?或者……两个都一样吗?

谢谢.

解决方法:

它们非常相似.浏览MenuInflator的源代码,它唯一使用上下文的是访问资源文件.因此,具体上下文与MenuInflator无关.

至于内存泄漏,你引用的文章说

The most obvious [way to avoid memory leaks] is to avoid escaping the
context outside of its own scope

除非您将MenuInflator(或Menu)传递给另一个类,否则它将包含在活动中并且不会泄露.

编辑

另外,Activity.getMenuInflator()只是新MenuInflator()的一种便捷方法.实际上这是Activity类中的方法:

public MenuInflater getMenuInflater() {
    return new MenuInflater(this);
}

通常最好使用便捷方法,因为它们允许在将来版本中更改底层实现,而无需更改代码.例如,如果修改上述方法以返回缓存的实例,而不是每次都创建一个新的实例.

标签:android,android-menu
来源: https://codeday.me/bug/20191006/1858000.html