常见面试第二题之什么是Context
今天的面试题,也就是我们常见面试题系列的第二题,我们来讲一讲android中的context。我相信大家android开发者一定对于这个context非常熟悉,肯定都有使用过,肯定没有没使用过的。但是这个context是什么呢?有多少人能理解呢?我们上一个题讲的是listview,这个也是非常常见的,今天的context也是非常常见的,所以面试题其实离我们很近的,一定都是常用的才会问题,很少有公司面试一些非常偏僻的,不用的东西,在开发中没用面试什么啊?对吧,好了,有点扯多了,我们从茄子地里回来,接着讲这个context。
1、什么是context?
这个在我们开发中最熟悉而又陌生的朋友到底是什么呢?可能大家会不约而同的说,是场景,是上下文,但是到底有多少人理解这个原理呢?我简单概括一下,应该有以下几点:
①、它描述的是一个应用程序环境的信息,即上下文。②、该类是一个抽象(abstract class)类,Android提供了该抽象类的具体实现类。③、通过它我们可以获取应用程序的资源和类,也包括一些应用级别操作,例如:启动一个Activity,发送广播,接受Intent信息等。说了这三点好像你还有点模糊,那我就总结来说。
总结就是:Context是一个抽象基类,我们通过它访问当前包的资源(getResources、getAssets)和启动其他组件(Activity、Service、Broadcast)以及得到各种服务(getSystemService),当然,通过Context能得到的不仅仅只有上述这些内容。对Context的理解可以来说:Context提供了一个应用的运行环境,在Context的大环境里,应用才可以访问资源,才能完成和其他组件、服务的交互,Context定义了一套基本的功能接口,我们可以理解为一套规范,而Activity和Service是实现这套规范的子类,这么说也许并不准确,因为这套规范实际是被ContextImpl类统一实现的,Activity和Service只是继承并有选择性地重写了某些规范的实现。
2、我们来看一下context的相关类的继承关系
通过图上我们可以看出:Activity类 、Service类 、Application类本质上都是Context子类,知道为什么老是在这些里面用到context了吧?3、Application、Activity和Service作为Context的区别
相同点:它们都间接继承了Context。
不同点:首先看它们的继承关系,通过对比可以清晰地发现,Service和Application的类继承关系比较像,而Activity还多了一层继承ContextThemeWrapper,这是因为Activity有主题的概念,而Service是没有界面的服务,Application更是一个抽象的东西,它也是通过Activity类呈现的。Context的真正实现都在ContextImpl中,也就是说Context的大部分方法调用都会转到ContextImpl中,而三者的创建均在ActivityThread中完成,Activity启动的核心过程是在ActivityThread中完成的,这里要说明的是,Application和Service的创建也是在ActivityThread中完成的。
4、一个应用程序中有多少个context?
一个应用程序中到底有多少个context?这个问题就是我们面试中最常见的,也是经常被问到的,看完以上三点的分析?你知道有多少个了吗?
答案显而易见:总Context实例个数 = Service个数 + Activity个数 + 1(Application对应的Context实例)
说到这里我相信大家应该有所理解了吧?实在没理解的抽空去查一下源码分析一下,深刻的理解一下。了解了我上边所说的那些内容之后,你在面试中遇到相关context的问题,基本上没问题了。
说完了两道题之后,有没有特别想期待第三题呢?
个人组织了一个高端Android微信交流群,有意向的可以先分享此文章到朋友圈,再加我微信,发送分享到朋友圈的截图给我,我把你拉进去。保你学到更多知识,可以第一时间收到干货推送。
微信号:smart_android (←长按复制)
介绍:非著名程序员,字耿左直右,号涩郎,爱搞机,爱编程,是爬行在移动互联网中的一名码匠!
个人微信号:loonggg
微博:涩郎
QQ群:413589216 更多资料和源码尽在QQ群文件
今日头条:搜索“非著名程序员”订阅更多信息
工作:专注于移动互联网的开发和研究,本号致力于分享IT技术和程序猿工作心得体会。欢迎大家关注与转载。
常见面试第二题之什么是Context的更多相关文章
- 常见面试算法题JS实现-设计一个有getMin功能的栈
前言: 已经确定工作了-下周一正式入职,按理说应该是可以好好浪荡一周的,但是内心总是不安,总觉得自己这个水平真的太菜了,还是趁着现在有自己的时间,赶紧多看看书,多学习学习吧orz所以把之前校招买的书, ...
- 常见面试算法题JS实现-仅用递归函数和栈操作逆序一个栈
前言: 因为JAVA和JS语言特性的不同,有些东西在JAVA中可能需要一些技巧和手段才能实现的复杂程序,但是在JS中可能就是天然存在的,所以这套书里面的题目不会全部用JS去实现一遍,因为可能JS的实现 ...
- Android开发面试经——6.常见面试官提问Android题②(更新中...)
版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客:http://blog.csdn.net/fi ...
- Android开发面试经——5.常见面试官提问Android题①
版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客: http://blog.csdn.net/f ...
- 19道常见的JS面试算法题
最近秋招也做了多多少少的面试题,发现除了基础知识外,算法还是挺重要的.特意整理了一些常见的算法题,添加了自己的理解并实现. 除此之外,建议大家还可以刷刷<剑指offer>.此外,左神在牛客 ...
- 数据结构+算法面试100题~~~摘自CSDN
数据结构+算法面试100题~~~摘自CSDN,作者July 1.把二元查找树转变成排序的双向链表(树) 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.要求不能创建任何新的结点,只调 ...
- Android常见面试笔试题目
Android常见面试笔试题目 1.在多线程编程这块,我们经常要使用Handler,Thread和Runnable这三个类,那么他们之间的关系你是否弄清楚了呢? 答:可以处理消息循环的线程,他是一个拥 ...
- 数据库表设计时一对一关系存在的必要性 数据库一对一、一对多、多对多设计 面试逻辑题3.31 sql server 查询某个表被哪些存储过程调用 DataTable根据字段去重 .Net Core Cors中间件解析 分析MySQL中哪些情况下数据库索引会失效
数据库表设计时一对一关系存在的必要性 2017年07月24日 10:01:07 阅读数:694 在表设计过程中,我无意中觉得一对一关系觉得好没道理,直接放到一张表中不就可以了吗?真是说,网上信息什么都 ...
- linux运维面试精华题
Linux运维跳槽面试精华题|第一集 1.什么是运维?什么是游戏运维? 1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常,在他运转的过程中,对他进行维护,他集合了网络 ...
随机推荐
- jquery实践案例--验证电子邮箱
<input type="email" name="email" id="email" value="" onpa ...
- JavaScript生成GUID的算法
全局唯一标识符(GUID,Globally Unique Identifier)也称作 UUID(Universally Unique IDentifier) . GUID是一种由算法生成的二进制长度 ...
- 在Windows2012下配置Mercurial
所需的安装文件: xampp-win32-1.8.3-4-VC11-installer.exe python-2.7.7.amd64.msi tortoisehg-3.0.1-x64.msi merc ...
- dw websites
http://www.kimballgroup.com/data-warehouse-business-intelligence-resources/kimball-techniques/dimens ...
- 开发一个App要多少钱?APP开发报价单,APP开发外包有哪些注意事项-广州达到信息www.ddapp.com.cn
来源:广州达到信息著作权归广州达到信息所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作为一个APP开发从业者,经常会有人问到:开发一个App要多少钱?下面针对这个问题来好好解答解答正经的谈 ...
- python刷题专用函数。。
无它,非bin()莫属. bin(x) Convert an integer number to a binary string. The result is a valid Python expre ...
- HDU 3081 最大流+并查集
题意:有n个男生和n个女生,玩结婚游戏,由女生选择男生:女生可以选择不会和她吵架的男生以及不会和她闺蜜吵架的男生,闺蜜的闺蜜也是闺蜜.问你最多可以进行多少轮,每一轮每个女生只能选择一个之前她没选过的男 ...
- 安卓内存不足(删除data/dalvik-cache目录)
alvik-cache alvik-cache名词解释: 在系统data/dalvik-cache文件夹里有很多安装卸载文件(优化过的字节码),这些文件是当你安装好一个应用程序后,系统会自动生成的一个 ...
- Android ActionBarDrawerToggle、DrawerLayout、ActionBar 结合
ActionBarDrawerToggle是一个开关,用于打开/关闭DrawerLayout抽屉 ActionBarDrawerToggle 提供了一个方便的方式来配合DrawerLayout和Act ...
- page-cache层以及各种标志位之间的转换
对真实文件系统层,算是懂了,但是vfs层以及block层还是有点生疏呢,最近要好好分析一下了. page-cache层主要关注文件读写时的行为,包括页的状态之间的变化,何时变脏,何时变成writeba ...