您的位置:首页 > 移动开发 > Android开发

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

2016-02-16 15:36 423 查看
其实在学习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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: