gpt4 book ai didi

android - 从 Activity 中创建新的 menuInflater 或 getMenuInflater()?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:26:55 26 4
gpt4 key购买 nike

我正在 fragment 中创建新的选项菜单,但在阅读之后 http://developer.android.com/resources/articles/avoiding-memory-leaks.html据说使用上下文应用程序比上下文 Activity 更好,我不敢使用 getActivity().getMenuInflater()

那么,到底哪个更好

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

或者一个电话 Activity

@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(或菜单)传递给另一个类,否则它包含在 Activity 中并且不会被泄露。

编辑

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

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

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

关于android - 从 Activity 中创建新的 menuInflater 或 getMenuInflater()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7776258/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com