为什么Activity的构造函数中的getApplicationContext()会引发空指针exception?

经过一段时间的错误狩猎后,事实certificate:

public class MainActivity extends BaseActivity { // BaseActivity extends Activity public MainActivity() { super(); getApplicationContext(); // NPE here } } 

为什么? 这在哪里logging?
升级Froyo

等待onCreate的结束来调用这个方法。

 public class MainActivity extends BaseActivity { public onCreate(Bundle savedInstanceState) { super(savedInstanceState); getApplicationContext(); //activity has a context now } } 

只是想知道发生了什么。 Activity 扩展了ContextThemeWrapper ,它扩展了ActivityinheritancegetApplicationContext() ContextWrapperContextWrapper将其 实现为 :

 @Override public Context getApplicationContext() { return mBase.getApplicationContext(); // mBase is a Context } 

ContextWrapper 唯一的公共构造 ContextWrapper是:

  public ContextWrapper(Context base) { mBase = base; } 

ContextThemeWrapper 我们有 :

  public ContextThemeWrapper() { super(null); } 

并且由于Activity没有定义一个显式的构造函数,所以上面的构造函数在Activity的构造函数中被称为 – mBase == null

来自4.2.2_r1链接