Android中最常使用的Context上下文相关总结

其实在学习Android的时候,遇到上下文这个概念的时候,非常的迷糊,因为contex的种类太多了,什么getBaseContext(),  getApplicationContext()......或多种Context, 都不知道怎么使用Context.今天有空,坐下来学习一点新的东西,所以我就搜索了各种资源来彻底深入的了解了一下Context.

 要学习一个新的技术,不过要学会他是怎么使用的,还要了解他的底层东西,这样我们才能把一个知识掌握的更加牢固。就像识人一样,咱们不能从一个人的外表,来判断这个人的好坏,咱么应该从点滴小事了解这个人。下面大家看一下Context的继承结构图:

        

不看不知道,看了之后,你会不会大吃一惊,原来我们经常使用的Context用这么多的机场关系。我是在看到这幅图之前是没有见过ContextImpl, ContextWrapper这两个类的。

既然类名不一样,肯定功能也是不一样的。ContextWrapper这个类是上下文功能的封装类,ContextImpl则是上下文功能的实现类。从图中可以很清楚的看到,ContextWrapper这个类有三个直接的子类,一个是Application , 一个是Service 这两个都是我们非常熟悉的和常用的类,还用一个ContextThemeWrapper这个类,我们不经常使用,但是咱们在看看这个类的直接子类是Activity这个类,大家就不会陌生了。但是为什么Acitivity不是跟Appliciton, Service平级,而非的在封装一层呢,那咱们在来看一看ContextThemeWrapper这个类,从意思是带主题的封装类。

    现在我们看到的常用的Application, Activity, Service都是Context的一种类型,这三个类的作用是完全不相同的。他们具体的Context功能则是由ContextImpl类去实现的。我们最常使用的Context的地方,就是弹出Toast, 启动Activity, 启动service ,发送广播,等等,使用的地方真是太多了。但是由于Context的具体功能是由ContextImpl类去实现的,因此在绝大多数场景下,Activity , Service, 和 Application这三种类型的Context都是可以通用的。但是肯定会有一些特殊的情况,比如说,一个Activity跳转到另一个的Activtiy.

         Intent  intent= new Intent(context,要跳转的Activity的名字.class);

一个Activity的启动必须要建立在另一个Activity的基础之上。也就是以此形成了一个返回栈。因此在这种情况下,我们只能使用Activity类型的Context, 否则将会出错。

一个工程中那么多地方使用Context, 但是到底有多少个Context ??? 这个也是可以计算的。因为Context 有三种类型,Activity , service, Applictation.  所以一个项目中Context的数量,就可以这样计算。

 Context 数量 = Activity的数量  +   Service的数量  + 1 (application)




  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值