A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Context完全解析,Context细节精华全掌握,用Context不迷糊

涨薪机密——潮流新技术、新框架资源以后不定期更新,
  


      Context相信所有的Android开发人员基本上每天都在接触,因为它太常见了。但是这并不代表Context没有什么东西好讲的,实际上Context有太多小的细节并不被大家所关注,那么今天我们就来学习一下那些你所不知道的细节。Context细节精华全掌握,从此用起Context再不迷糊。这个知识体系接下来将分为三部曲给大家详细深入说一下,第一篇主要聊聊Context的类型与数量。第二篇会深扒Application Context的设计。第三篇来说说使用Application的问题。

第一篇:Context的类型与数量
       
· Context类型
       我们知道,Android应用都是使用Java语言来编写的,那么大家可以思考一下,一个Android程序和一个Java程序,他们最大的区别在哪里?划分界限又是什么呢?其实简单点分析,Android程序不像Java程序一样,随便创建一个类,写个main()方法就能跑了,而是要有一个完整的Android工程环境,在这个环境下,我们有像Activity、Service、BroadcastReceiver等系统组件,而这些组件并不是像一个普通的Java对象new一下就能创建实例的了,而是要有它们各自的上下文环境,也就是我们这里讨论的Context。可以这样讲,Context是维持Android程序中各组件能够正常工作的一个核心功能类。
      下面我们来看一下Context的继承结构:

         Context的继承结构还是稍微有点复杂的,可以看到,直系子类有两个,一个是ContextWrapper,一个是ContextImpl。那么从名字上就可以看出,ContextWrapper是上下文功能的封装类,而ContextImpl则是上下文功能的实现类。而ContextWrapper又有三个直接的子类, ContextThemeWrapper、Service和Application。其中,ContextThemeWrapper是一个带主题的封装类,而它有一个直接子类就是Activity。


          那么在这里我们至少看到了几个所比较熟悉的面孔,Activity、Service、还有Application。由此,其实我们就已经可以得出结论了,Context一共有三种类型,分别是Application、Activity和Service。这三个类虽然分别各种承担着不同的作用,但它们都属于Context的一种,而它们具体Context的功能则是由ContextImpl类去实现的。


          那么Context到底可以实现哪些功能呢?这个就实在是太多了,弹出Toast、启动Activity、启动Service、发送广播、操作数据库等等等等都需要用到Context。由于Context的具体能力是由ContextImpl类去实现的,因此在绝大多数场景下,Activity、Service和Application这三种类型的Context都是可以通用的。不过有几种场景比较特殊,比如启动Activity,还有弹出Dialog。出于安全原因的考虑,Android是不允许Activity或Dialog凭空出现的,一个Activity的启动必须要建立在另一个Activity的基础之上,也就是以此形成的返回栈。而Dialog则必须在一个Activity上面弹出(除非是System Alert类型的Dialog),因此在这种场景下,我们只能使用Activity类型的Context,否则将会出错。
         
· Context数量
          那么一个应用程序中到底有多少个Context呢?其实根据上面的Context类型我们就已经可以得出答案了。Context一共有Application、Activity和Service三种类型,因此一个应用程序中Context数量的计算公式就可以这样写:

Context数量 = Activity数量 + Service数量 + 1  

        上面的1代表着Application的数量,因为一个应用程序中可以有多个Activity和多个Service,但是只能有一个Application。
        下一篇: Application Context的设计
其他精华资源推荐:



98 个回复

倒序浏览
这个技术沙发,第一次坐哦~~~
回复 使用道具 举报
表示还没学到安卓部分
回复 使用道具 举报
谢谢分享啦
回复 使用道具 举报
6666666666666
回复 使用道具 举报
感谢楼主分享!!
回复 使用道具 举报
感谢楼主分享!!
回复 使用道具 举报
感谢分享
回复 使用道具 举报
分析的不错,收藏了
回复 使用道具 举报
6666666666666666666666666666666666666
回复 使用道具 举报
不错的东西哦!!
回复 使用道具 举报
8888888888888888888
回复 使用道具 举报
谢谢分享啦
回复 使用道具 举报
好深奥啊,看不懂啊。
回复 使用道具 举报
这个技术沙发,第一次坐哦~~~
回复 使用道具 举报
这个能不能加到课堂上来讲讲囊V????????????????????????????
回复 使用道具 举报
好好好好好
回复 使用道具 举报
好好好啊哈哦啊好
回复 使用道具 举报 1 0
必须顶……
回复 使用道具 举报
感谢分享!!!
回复 使用道具 举报
12345下一页
您需要登录后才可以回帖 登录 | 加入黑马