Android getContext()方法在片段中返回null。将上下文保存在变量中是一个好主意吗?我想了解利弊
我所做的是 方法1:Android getContext()方法在片段中返回null。将上下文保存在变量中是一个好主意吗?我想了解利弊,android,android-context,Android,Android Context,我所做的是 方法1: public View onCreateView(.....){ context = getContext(); } 我在任何需要的地方使用这个上下文对象。这是正确的方法还是我应该使用getContext!=null并使用getContext返回的值。我也知道我可以从getActivity获取上下文,但是如果“getContext”返回null,它也将返回null 作为替代,我可以在每次需要上下文时都这样做 方法2: if(getActivity() != nu
public View onCreateView(.....){
context = getContext();
}
我在任何需要的地方使用这个上下文对象。这是正确的方法还是我应该使用getContext!=null并使用getContext返回的值。我也知道我可以从getActivity获取上下文,但是如果“getContext”返回null,它也将返回null
作为替代,我可以在每次需要上下文时都这样做
方法2:
if(getActivity() != null){
//use getActivity() here
}
我想了解哪种方法更好,为什么?在片段中重写函数
private Context mContext;
@override
void onAttach(Context context) {
mContext = context;
}
这就是在片段中获取上下文的方式,因为不建议将上下文从活动传递给片段和适配器 在片段中重写函数
private Context mContext;
@override
void onAttach(Context context) {
mContext = context;
}
这就是在片段中获取上下文的方式,因为不建议将上下文从活动传递给片段和适配器 如果您需要获取上下文并保存它,我建议您在当前活动上创建一个静态变量(如果您只使用一个活动)
//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();
}
好的,如果您需要获取上下文并保存它,我建议您在当前活动上创建一个静态变量,如果您只使用一个活动
//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都将返回null。如果它们返回null,我不建议使用任何以前存储的值,因为存储的上下文可能已被分离,并可能导致内存泄漏
@Override
public void onDetach() {
this.activity = null;
super.onDetach();
}
通常,在附加片段后,您会得到一个上下文。您可以将上下文存储在上下文回调中
@凌驾
公共上下文{
超级语境;
this.context=上下文;
}
但是,确保在片段分离时将其设置为null,以避免内存泄漏
@Override
public void onDetach() {
this.activity = null;
super.onDetach();
}
将上下文存储在我能想到的变量中没有任何缺点,除非您需要注意片段状态的更改。onDetach调用会处理这个问题。getActivity和getContext如果您的片段未附加到活动/上下文,则两者都将返回null。如果它们返回null,我不建议使用任何以前存储的值,因为存储的上下文可能已被分离,并可能导致内存泄漏
@Override
public void onDetach() {
this.activity = null;
super.onDetach();
}
通常,在附加片段后,您会得到一个上下文。您可以将上下文存储在上下文回调中
@凌驾
公共上下文{
超级语境;
this.context=上下文;
}
但是,确保在片段分离时将其设置为null,以避免内存泄漏
@Override
public void onDetach() {
this.activity = null;
super.onDetach();
}
将上下文存储在我能想到的变量中没有任何缺点,除非您需要注意片段状态的更改。OnDetch调用会解决这个问题。getActivitySecond方法是更好的方法。将上下文存储为局部变量可能是有害的,因为片段有自己的生命周期,我们无法预测上下文在哪个阶段变为null getActivity或getContext.getActivitySecond是更好的方法。将上下文存储为局部变量可能是有害的,因为片段有自己的生命周期,我们无法预测上下文在哪个阶段变为null getActivity或getContext。将上下文存储在静态变量中会导致应用程序内存泄漏。避开它!将上下文存储在静态变量中会导致应用程序内存泄漏。避开它!