在我的片段中调用方法getActivity()一次,并且每次我想要显示toast消息时,比在调用getActivity()时更好地保存mActivity中的引用?
Toast.makeText(mActivity, text, duration).show();
VS
Toast.makeText(getActivity(), text, duration).show();
答案 0 :(得分:3)
getActivity()
应该是首选:
1)内存泄漏预防
变量mActivity
位于周围会为内存泄漏提供机会,例如:错误地将变量设置为静态,可以方便地在某些匿名AysncTask
2)纠正片段 - 活动关系的性质
碎片可以在很多时候附着或分离。因此,获取托管当前片段的活动的参考应该是按需。拥有mActivity
变量意味着您需要正确设置和取消设置。
请注意,此处Toast
所需的内容是Context
对象,因此不一定是此处所需的活动。应用程序上下文对象也足够了
答案 1 :(得分:1)
碎片两者都是相同的
第一个
活动活力 = getActivity();
@Override
public void onClick(View arg0) {
Toast.makeText(**mActivity**,"Text!",Toast.LENGTH_SHORT).show();
}
第二个
像这样直接使用
Toast.makeText(getActivity(),"Text!",Toast.LENGTH_SHORT).show();
答案 2 :(得分:0)
如果您只需要一个上下文或活动,没有区别。但是如果要访问父活动中的某些方法或字段,最好将参考保存在mActivity中。
答案 3 :(得分:0)
如果您希望上下文仅显示Toast
消息,并且您很难获得对Activity的引用,那么您可以使用getApplicationContext()
代替。