黑马程序员技术交流社区

标题: [连载]一:Context完全解析精华全掌握,从此Context最清楚 [打印本页]

作者: Android_Robot    时间: 2016-6-2 11:54
标题: [连载]一:Context完全解析精华全掌握,从此Context最清楚
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的设计
其他精华资源推荐:
【强荐!】2016年最新Android学习路线图——按此路线图学习月薪过万{ 火速收入}
部落与荣耀:拥有一个足以让你自豪的薪资——Android76—83期连续霸(8)气(期)平均薪资超11K!
【连载】懂Android移动支付(支付宝),副本技能加成
【连载】懂Android移动支付(银联),副本技能加成
【连载】懂Android移动支付(微信),技能加成
[持续更新]2016最新Android视频教程+源码+技巧/经验+软件+面试




作者: yu2323637    时间: 2016-6-2 18:58
这个技术沙发,第一次坐哦~~~
作者: 心悟    时间: 2016-6-2 19:10
表示还没学到安卓部分
作者: Curvat    时间: 2016-6-2 21:09
谢谢分享啦
作者: hansuchang    时间: 2016-6-2 21:49
6666666666666
作者: L1184343637    时间: 2016-6-2 22:46
感谢楼主分享!!
作者: 清风幕竹    时间: 2016-6-3 00:30
感谢楼主分享!!
作者: Coolman    时间: 2016-6-3 08:41
感谢分享
作者: 一念地狱    时间: 2016-6-3 11:05
分析的不错,收藏了
作者: xuemingqiang    时间: 2016-6-3 22:29
6666666666666666666666666666666666666
作者: huhemingtiancai    时间: 2016-6-3 23:24
不错的东西哦!!
作者: sunchanglt    时间: 2016-6-4 00:34
8888888888888888888
作者: haochengjian    时间: 2016-6-4 18:34
谢谢分享啦
作者: zhangyu009    时间: 2016-6-4 23:02
好深奥啊,看不懂啊。
作者: ningshuilian    时间: 2016-6-4 23:06
这个技术沙发,第一次坐哦~~~
作者: 刘超杰    时间: 2016-6-5 15:05
这个能不能加到课堂上来讲讲囊V????????????????????????????
作者: zhaohua733    时间: 2016-6-6 17:23
好好好好好
作者: zhaohua733    时间: 2016-6-6 17:26
好好好啊哈哦啊好
作者: 云袭    时间: 2016-6-6 21:00
必须顶……
作者: 戎马生涯    时间: 2016-6-6 22:12
感谢分享!!!
作者: 马庆伟    时间: 2016-6-6 23:25
总结的很好,很实用,谢谢,  以保存,希望以后多多更新``
作者: zhoubinjian    时间: 2016-6-7 10:36
好东西。。。谢谢。。
作者: jialp1024    时间: 2016-6-7 10:52
总结的很好,很实用,谢谢,
作者: huangzhehua    时间: 2016-6-7 21:39
谢谢楼主分享!
作者: feimingxuan    时间: 2016-6-7 22:35
讲解的很到位
作者: cuisq    时间: 2016-6-11 11:24
还没有看懂,不过觉得很不错
作者: abcflash    时间: 2016-6-11 19:09
有用。。。。。。
作者: haojingwei310    时间: 2016-6-11 22:21
谢谢分享啦
作者: 星空@3    时间: 2016-6-12 08:44
学习了,还在奋斗中!
作者: Mature    时间: 2016-6-14 21:24
感谢分享!!!
作者: Mi丶ooo    时间: 2016-6-15 12:45
太棒了,要加油学。
作者: lyzhuhaoliang    时间: 2016-6-17 20:47
技术帖子 多看看多学习  
作者: chengongzong    时间: 2016-6-18 18:52
收藏了 慢慢看
作者: happyburglar    时间: 2016-6-20 09:40
加油,为了就业班!
作者: suming    时间: 2016-6-21 23:20
谢谢  分享  看到 兴趣了
作者: w1599928008    时间: 2016-6-22 23:52
谢谢楼主分享
作者: eyesee    时间: 2016-6-23 00:35
还在基础部分徘徊
作者: lsp0523    时间: 2016-6-23 09:50
我们能走多远完全在于我们站的肩膀有多高!黑马大牛。
作者: jiazhuoxiao    时间: 2016-6-23 20:06
虽说有点远 但还是收藏了
作者: zhoubinjian    时间: 2016-6-24 07:50
好贴,,正需要
作者: TommingYu    时间: 2016-6-24 21:45
大神  偶像啊
作者: 麦子守望星空    时间: 2016-6-25 08:02
谢谢分享。
作者: m18581215520    时间: 2016-6-25 20:56

作者: 940752944    时间: 2016-6-25 22:37
表示还没学到安卓部分
作者: jay_kebi    时间: 2016-6-25 23:25
很有帮助的帖子,棒棒哒
作者: guyue    时间: 2016-6-26 11:46
马上就要学安卓了
作者: fanhongwei1105    时间: 2016-6-26 19:54
有木有关于javaEE的学习路线,或者技术分享
作者: YC1992    时间: 2016-7-1 09:09
胸怀宽广,气度不凡,人中之龙
作者: YC1992    时间: 2016-7-1 09:11
胸怀宽广,气度不凡,人中之龙
作者: qingchun    时间: 2016-7-1 22:31
还在为技术分犯愁吗?以后柳柳桑不定期给大家带来技术题,不仅可以考核一下所学的内容,还可以轻松获得技术分。
作者: keting555    时间: 2016-7-6 00:27
说的非常好 我很赞同~~~~~~
作者: Jason王    时间: 2016-7-6 12:11
可以的,学到了。
作者: Jason王    时间: 2016-7-6 12:12
可以的,学到了。
作者: nihao_javaee    时间: 2016-7-8 22:21
不明觉厉
作者: anyeyyc    时间: 2016-7-8 23:11
好东西  Mark
作者: fuwei52331314    时间: 2016-7-8 23:30
好好的。。。。。。。
作者: keting555    时间: 2016-7-8 23:38
说的非常好~~~~~~~~~~~~~~~~
作者: 墨尔    时间: 2016-7-8 23:56
赞赞赞赞赞赞赞赞赞赞赞赞赞
作者: 弄啥呢    时间: 2016-7-10 21:13
大神分享
作者: DDV    时间: 2016-7-10 23:04
学习了 好屌 啊
作者: 惊鸿游龙    时间: 2016-7-12 09:13
666666666666666
作者: 896575538    时间: 2016-7-12 22:36
并不能看懂
作者: empty3717    时间: 2016-7-13 01:53
学习了,好。
作者: 胡哓甫    时间: 2016-7-13 10:27
分析的不错,收藏了
作者: object_dk    时间: 2016-7-13 11:39
有点看不懂...
作者: 富林    时间: 2016-7-13 12:25
可以!顶顶顶!
作者: 回根的落叶    时间: 2016-7-14 23:23
谢谢分享!
作者: empty3717    时间: 2016-7-14 23:53
先收藏了,以后学到安卓再使用。
作者: 13182002757    时间: 2016-7-15 13:30
感谢分享
作者: syso    时间: 2016-7-16 08:04
赞赞赞赞赞赞赞赞
作者: chidaodehouguo    时间: 2016-7-17 21:37
分析的不错,收藏了
作者: 13453650568    时间: 2016-7-18 19:59
好好爱好!!!
作者: 犁地的拖拉机    时间: 2016-7-18 22:12
不错,,,总结到位
作者: ab159263487    时间: 2016-7-19 22:01
虽然只能看懂小部分,,但还是很感谢
作者: 紫电_恶魔    时间: 2016-7-20 00:52
好东西,感谢
作者: zhoucy    时间: 2016-7-21 00:51
感谢分享,,完美的IT,完美是人生
作者: sanmaovszhe    时间: 2016-7-21 11:04
学习了 谢谢
作者: Frank_Ms1ZR    时间: 2016-7-24 00:16
谢谢分享
作者: 昭阳    时间: 2016-7-26 23:11
恩,有点明白,虽然还没学到这里,不过对以后有帮助
作者: miqideliwu    时间: 2016-7-27 00:22
真希望自己早日牛逼起来
作者: houzhiming    时间: 2016-7-28 18:08
很好很好,谢谢分享
作者: xiaodutongxie    时间: 2016-7-31 08:39
ganxie fan xiang
作者: 487941230    时间: 2016-7-31 22:22
999999999999
作者: yezilail    时间: 2016-8-2 11:01
感谢楼主分享!!
作者: fzc123    时间: 2016-8-3 00:11
赞赞赞赞赞赞赞赞赞赞赞赞赞
作者: ObjectGitHub    时间: 2016-8-28 18:42
感觉看完之后,还是对Context有点模糊,只是敲代码是用到,但是让自己说却说不出来什么意思
作者: zhouyang1993    时间: 2016-8-29 12:55
66666666
作者: 飞天神猫    时间: 2016-11-15 20:05
好好 666666666666
作者: 1985206835long    时间: 2016-11-22 22:00
必须顶……
作者: 201314    时间: 2016-11-29 23:07
好好学习,天天向上。
作者: 袁志娜    时间: 2016-11-29 23:28

作者: 谭世霖    时间: 2016-12-1 12:14
#在这里快速回复#感觉还可以
作者: 再见不见    时间: 2016-12-2 14:54


作者: cjc147    时间: 2016-12-3 20:48
分析到位
作者: 201314    时间: 2016-12-3 23:31
好好学习,天天向上。
作者: JSK-CSY    时间: 2016-12-4 23:57
谢谢分享
作者: JSK-CSY    时间: 2016-12-8 23:52
好好好,未来技术分,果断围观
作者: 1985206835long    时间: 2016-12-9 23:24
谢谢分享!!!!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2