非空视图能否在侦听器中为其上下文提供空引用?

时间:2019-02-06 14:31:19

标签: android android-view android-context

假设代码如下:

final View someView = ....;  

// some code  
someView.setOnClickListener(v -> {  
    if(someView == null) return;  
    Context context = someView.getContext();  
    // can context be null at this point?
}); 

视图是否可能在某些流程中具有空Context

1 个答案:

答案 0 :(得分:0)

我的猜测:我认为,如果View不为null,则上下文不能为null。

检查View.java的源代码,我们可以看到:

public class View {

    public View(Context context) {
        mContext = context;
    }

    public final Context getContext() {
        return mContext;
    }
}

如您所见,mContext在构造函数中初始化,并且其引用不变(mContext引用未更新)。它始终指向构造函数中接收到的引用。 另外,getContext()是最终的。因此,不能确保getContext()将始终执行上面的代码。

如果您尝试创建一个传递空指针的视图(例如View someView = new View(null)),则您的应用将因其他原因而崩溃...因此,mContext(和getContext())无法如果view不为null,则为null。