为什么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()
ContextWrapper 。 ContextWrapper将其 实现为 :
@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
链接