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

GAO*_*kai 9 android android-menu

我正在片段中创建新的选项菜单,但在阅读了 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);
}
Run Code Online (Sandbox Code Playgroud)

或者一个电话活动

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

}
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

spa*_*nia 14

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

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

最明显的[避免内存泄漏的方法]是避免在自己的范围之外转移上下文

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

编辑

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

public MenuInflater getMenuInflater() {
    return new MenuInflater(this);
}
Run Code Online (Sandbox Code Playgroud)

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