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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值