Acrtivity和Application的Context的区别

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的,参考博客:

https://www.cnblogs.com/ganchuanpu/p/6683586.html

你可能感兴趣的:(android,Context,Applicaiton,Activity)