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