从活动创build新的menuInflater或getMenuInflater()?

我正在创build新的选项菜单里面的片段,但在阅读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); } 

他们两个之间有什么区别? 或者..都是一样的?

谢谢。

Solutions Collecting From Web of "从活动创build新的menuInflater或getMenuInflater()?"

他们非常相似。 纵观MenuInflator的来源,它使用上下文的唯一方法是访问资源文件。 所以具体的上下文无关MenuInflator。

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

最明显的避免内存泄漏的方法是避免在自己范围之外的环境中逃脱

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

编辑

另外Activity.getMenuInflator()只是一个new MenuInflator()方便的方法。 实际上这是Activity类中的方法:

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

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

您应该使用传递给方法的MenuInflater实例public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) (注意第二个参数)
没有什么真正的区别,因为一旦你完成使用,通常你会“忘记”它,但是如果你已经有了一个参数,为什么还要创build一个呢?

由此改变:

 MenuInflater inflater = getMenuInflater(); 

对此:

 MenuInflater inflater = getActivity().getMenuInflater();