黑马程序员技术交流社区
标题: [连载]一: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。
其他精华资源推荐:
作者: 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 |