片段中的 getContext() 方法 returns 为 null。将上下文保存在变量中是个好主意吗?我想了解利弊
getContext() method returns null in fragment. Is it a good idea to keep the context in a variable? I want to understand the pros and cons
我做的是
方法一:
public View onCreateView(.....){
context = getContext();
}
我在任何需要的地方使用这个上下文对象。这是正确的方法还是我应该使用 getContext != null
并使用由 getContext()
编辑的值 return。我也明白我可以从 getActivity()
获取上下文,但如果 'getContext()' 是 returning null.
它也会 return null
作为替代方案,我可以在每次需要上下文时执行此操作。
方法二:
if(getActivity() != null){
//use getActivity() here
}
我想了解哪种方法更好,为什么?
在您的片段中覆盖函数
private Context mContext;
@override
void onAttach(Context context) {
mContext = context;
}
这就是您在片段中获取上下文的方式,因为从不建议将上下文传递给来自活动的片段和适配器。
好吧,如果您需要获取上下文并保留它,我建议您在当前 activity 上创建一个静态变量(如果您只使用一个 activity)
//if use only one Activity
private static Context context;
public static Context getRunningContext() {
return context;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
this.context=getApplicationContext();
}
或改用 getActivity()。
Context context;
public View onCreateView(.....){
context = getActivity();
}
如果您的片段未附加到 activity/context,getActivity()
和 getContext()
都将 return 为空。如果它们是 returning null,我不建议使用任何以前存储的值,因为存储的上下文可能已分离并可能导致内存泄漏。
通常,您会在附加片段后获得上下文。您可以将上下文存储在 onAttach(Context)
回调中。
@Override
public void onAttach(Context context) {
super.onAttach(context);
this.context = context;
}
但是,请务必在片段分离时将其设置为 null 以避免内存泄漏。
@Override
public void onDetach() {
this.activity = null;
super.onDetach();
}
我能想到将上下文存储在变量中没有任何缺点,除非您需要注意片段状态的变化。 onDetach()
调用会处理这个问题。
我做的是
方法一:
public View onCreateView(.....){
context = getContext();
}
我在任何需要的地方使用这个上下文对象。这是正确的方法还是我应该使用 getContext != null
并使用由 getContext()
编辑的值 return。我也明白我可以从 getActivity()
获取上下文,但如果 'getContext()' 是 returning null.
作为替代方案,我可以在每次需要上下文时执行此操作。
方法二:
if(getActivity() != null){
//use getActivity() here
}
我想了解哪种方法更好,为什么?
在您的片段中覆盖函数
private Context mContext;
@override
void onAttach(Context context) {
mContext = context;
}
这就是您在片段中获取上下文的方式,因为从不建议将上下文传递给来自活动的片段和适配器。
好吧,如果您需要获取上下文并保留它,我建议您在当前 activity 上创建一个静态变量(如果您只使用一个 activity)
//if use only one Activity
private static Context context;
public static Context getRunningContext() {
return context;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
this.context=getApplicationContext();
}
或改用 getActivity()。
Context context;
public View onCreateView(.....){
context = getActivity();
}
getActivity()
和 getContext()
都将 return 为空。如果它们是 returning null,我不建议使用任何以前存储的值,因为存储的上下文可能已分离并可能导致内存泄漏。
通常,您会在附加片段后获得上下文。您可以将上下文存储在 onAttach(Context)
回调中。
@Override
public void onAttach(Context context) {
super.onAttach(context);
this.context = context;
}
但是,请务必在片段分离时将其设置为 null 以避免内存泄漏。
@Override
public void onDetach() {
this.activity = null;
super.onDetach();
}
我能想到将上下文存储在变量中没有任何缺点,除非您需要注意片段状态的变化。 onDetach()
调用会处理这个问题。