1. Applicaiton的构造只有一个
public Application() {
super(null);
}
其父类是ContextWrapper,构造只有一个
Context mBase;
public ContextWrapper(Context base) {
mBase = base;
}
由此可见,super里面传进去的是null,Applicaiton是不存在Context的,所以对于Applicaiton的方法
@Override
public SharedPreferences getSharedPreferences(String name, int mode) {
return mBase.getSharedPreferences(name, mode);
}
是无效的,因为mBase这个Context始终为null,所以使用SharedPreference时不能把Applicaiton作为Context使用,否则会崩溃,报空指针异常。
2. Activity在启动过程跟Applicaiton不一样,ActivityThread在启动Activity过程中通过attach方法给Activity的mBase赋值,所以是存在Context的,参考博客: