我在fragment中创建了新的选项菜单,但在阅读了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);
}或者one call活动
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
MenuInflater mInflater = getActivity().getMenuInflater();
mInflater.inflate(R.menu.simple_menu, menu);
}他们两个有什么不同? or..both是一样的吗?
谢谢。
发布于 2011-10-15 16:28:39
它们非常相似。查看MenuInflator的源代码,它使用上下文的唯一目的是访问资源文件。因此,特定的上下文对MenuInflator来说并不重要。
至于内存泄漏,您参考的文章中说
避免内存泄漏的最明显的方法是避免在它自己的作用域之外转义上下文
除非您将MenuInflator (或菜单)传递给另一个类,否则它将包含在活动中,不会泄漏。
编辑
此外,对于new MenuInflator()来说,Activity.getMenuInflator()只是一种方便的方法。实际上,这是Activity类中的方法:
public MenuInflater getMenuInflater() {
return new MenuInflater(this);
}使用方便的方法通常更好,因为它们允许在未来的版本中更改底层实现,而不必更改代码。例如,如果将上述方法修改为返回一个缓存实例,而不是每次都创建一个新实例。
发布于 2014-02-28 16:19:06
您应该使用传递给public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)方法的MenuInflater实例(请注意第二个参数)
这没有真正的区别,因为通常你一使用完它就会“忘记”它,但是如果你已经从参数中创建了一个,为什么还要创建一个呢?
发布于 2017-03-25 19:15:38
从以下内容更改:
MenuInflater inflater = getMenuInflater();要这样做:
MenuInflater inflater = getActivity().getMenuInflater();https://stackoverflow.com/questions/7776258
复制相似问题