Application、Activity、Context的关系

参考http://blog.csdn.net/woaieillen/article/details/10234807

Application继承关系图

Activity继承关系图

  • 从上面两张图我们可以看出:Application和Activity都是继承自Context
  • Application对象是整个应用的上下文(通过打印日志可知:无论在哪里,通过getApplication或getApplicationContext得到的都是同一个Cotext对象,也就是应用的上下文),而Activity则不同,虽然都是继承自Context,但是在Activity中this和getApplication(getApplicationContext)得到的对象不是同一个!Activity的this这个上下文可用于界面UI的构造等(如弹窗,new View),而Application则不行。
  • 在Acctivity中通过getParent获得的也是Activity对象(父activity)。顺便扩展一下,这个方法是只有当activity是一个嵌入式的activity时才返回父activity(否则为null)。如下,查看Activity源码的说明:

      /** Return the parent activity if this view is an embedded child. */
      public final Activity getParent() {
        return mParent;
      }
  • 通过 getBaseContext获得的上下文对象则各不相同,引用google工程师的一句话:

    Don’t use getBaseContext(), just use the Context you have.
    不要使用getBaseContext(),只使用你有的Context。

  • Application(或者说应用的上下文对象)是和应用程序关联的,并且在程序的生命周期内,总是一样的。而Activity(Activity的上下文)是关联在某个活动上的,随着Activity的销毁(比如横竖屏切换等情况),这个Context也会被销毁N多次。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值