使用片段时 getContext() 和 requireContext() 之间的区别
Difference between getContext() and requireContext() when using fragments
我一直有这个疑问很长一段时间,当我使用 android 片段并且我需要实例化一个上下文,或者我需要将一个上下文作为参数传递给其他函数时,我可以选择在 getContext() 和 requireContext() 方法之间使用来实现这一点,我通常更喜欢使用 requireContext(),但只是因为 IDE(Android Studio) 在我使用时有时会显示警告getContext()。但是无论我选择什么,使用一种或另一种方法的结果似乎都是一样的。
我的问题是,这两种方法有什么区别吗?如果是这种情况,哪个更好,或者我应该在每种情况下使用哪个?
getContext()
return 可以为 null Context
。
requireContext()
return 是一个非空值 Context
,或者当一个不可用时抛出异常。
如果您的代码处于生命周期阶段,您知道您的片段已附加到上下文,只需使用 requireContext()
即可获得 Context
并让静态分析器对潜在的 NPE 问题感到满意。
如果您的代码在常规片段生命周期之外(例如,异步回调),您最好使用 getContext()
,自己检查它的 return 值,只有在它存在时才继续使用它非空。
明确表示可为空性在 Kotlin 中更为重要,因为它内置于语言的类型系统中。
虽然 Laalto 的回答是正确的,但我添加了代码来证明 requireContext() 和 getContext 之间的区别。
在 Fragment.java 中,您应该会看到以下代码。
@NonNull
public final Context requireContext() {
Context context = getContext();
if (context == null) {
throw new IllegalStateException("Fragment " + this + " not attached to a context.");
}
return context;
}
可以看到requireContext()方法在context为null时抛出异常
@Nullable
public Context getContext() {
return mHost == null ? null : mHost.getContext();
}
另一方面,如果您看到 getContext() 的代码,则有可能在调用时得到空值。
我一直有这个疑问很长一段时间,当我使用 android 片段并且我需要实例化一个上下文,或者我需要将一个上下文作为参数传递给其他函数时,我可以选择在 getContext() 和 requireContext() 方法之间使用来实现这一点,我通常更喜欢使用 requireContext(),但只是因为 IDE(Android Studio) 在我使用时有时会显示警告getContext()。但是无论我选择什么,使用一种或另一种方法的结果似乎都是一样的。
我的问题是,这两种方法有什么区别吗?如果是这种情况,哪个更好,或者我应该在每种情况下使用哪个?
getContext()
return 可以为 null Context
。
requireContext()
return 是一个非空值 Context
,或者当一个不可用时抛出异常。
如果您的代码处于生命周期阶段,您知道您的片段已附加到上下文,只需使用 requireContext()
即可获得 Context
并让静态分析器对潜在的 NPE 问题感到满意。
如果您的代码在常规片段生命周期之外(例如,异步回调),您最好使用 getContext()
,自己检查它的 return 值,只有在它存在时才继续使用它非空。
明确表示可为空性在 Kotlin 中更为重要,因为它内置于语言的类型系统中。
虽然 Laalto 的回答是正确的,但我添加了代码来证明 requireContext() 和 getContext 之间的区别。
在 Fragment.java 中,您应该会看到以下代码。
@NonNull
public final Context requireContext() {
Context context = getContext();
if (context == null) {
throw new IllegalStateException("Fragment " + this + " not attached to a context.");
}
return context;
}
可以看到requireContext()方法在context为null时抛出异常
@Nullable
public Context getContext() {
return mHost == null ? null : mHost.getContext();
}
另一方面,如果您看到 getContext() 的代码,则有可能在调用时得到空值。