Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >常见面试第二题之什么是Context

常见面试第二题之什么是Context

作者头像
非著名程序员
发布于 2018-02-02 11:47:28
发布于 2018-02-02 11:47:28
7170
举报
文章被收录于专栏:非著名程序员非著名程序员

什么是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的问题,基本上没问题了。 说完了两道题之后,有没有特别想期待第三题呢?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-07-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 非著名程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【万人收藏】Twitter工程师从0到1教你设计百万级并发应用
万里征途总是从第一步开始的,构建一个复杂系统也是如此。我们从简单的部分着手,先让所有的功能都在一个服务器上运行。图1-1展示了如何配置单台服务器,让一切都在其上运行,包括Web应用、数据库、缓存等。
博文视点Broadview
2024/01/15
2360
【万人收藏】Twitter工程师从0到1教你设计百万级并发应用
简明入门讲义——一文理清负载均衡和反向代理
负载均衡器(Load Balance,下文简称 LB)更像是一个请求调度中心,主要是为了分发请求。这一角色使得它可以
benny
2021/06/17
1.1K0
简明入门讲义——一文理清负载均衡和反向代理
🏗️ 架构设计中的性能优化与可扩展性:如何找到平衡点? ⚖️
这里推荐一篇实用的文章:《CQRS 与 Event Sourcing:如何高效处理复杂业务场景!》,作者:【喵手】。
bug菌
2024/12/02
2290
🏗️ 架构设计中的性能优化与可扩展性:如何找到平衡点? ⚖️
MySQL - 扩展性 3 负载均衡:眼花缭乱迷人眼
基于这个思路,我们通常的做法是在服务器前端设置一个负载均衡器。负载均衡器的作用是将请求的连接路由到最空闲的可用服务器上。如图 1,显示了一个大型网站负载均衡设置。其中一个负责 HTTP 流量,另一个用于 MySQL 访问。
北国风光
2019/05/09
6320
MySQL - 扩展性 3 负载均衡:眼花缭乱迷人眼
【经典必读】web网站架构演变过程,电商网站升级打怪
前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变。 该系统具备的功能: 用户模块:用户注册和管理 商品模块:商品展示和管理 交易模块:创建交易和管理 阶段一、单机构建网站 网站的初期,我们经常会在单机上跑我们所有的程序和软件。此时我们使用一个容器,如tomcat、jetty、jboos,然后直接使用JSP/servlet技术,或者使用一些开源的框架如maven+spring+struct+hibernate、maven+spring+springmvc+mybatis
java思维导图
2018/03/15
1.1K0
【经典必读】web网站架构演变过程,电商网站升级打怪
一步一步理解Java企业级应用的可扩展性
老实说,“可扩展性”是个全面且详尽的话题,而且往往得不到充分理解。人们通常认为可扩展性等同于高可用性,笔者见过编程新手和架构师“老手”都建议将集群作为可扩展性和高可用性的解决方案。建议确实没错,但问题是,人们通常是通过互联网搜索,而非实际理解应用本身的情况来实现集群。
九州暮云
2019/08/21
1.1K0
一步一步理解Java企业级应用的可扩展性
1024—牛码同行
1024程序员节来了,我放慢了脚步,打算静下心来,好好享受,可是城市的声音太嘈杂,于是我戴上了耳机,那一刻,时间仿佛停止了,我的世界只有我!
知孤云出岫
2024/10/26
1830
1024—牛码同行
Nginx系列教程(4)nginx处理web应用服务负载均衡功能
在关于高并发负载均衡一文中已经提到,企业在解决高并发问题时,一般有两个方向的处理策略,软件、硬件,硬件上添加负载均衡器分发大量请求,软件上可在高并发瓶颈处:数据库+web服务器两处添加解决方案,其中web服务器前面一层最常用的的添加负载方案就是使用nginx实现负载均衡。
北梦木系生南国
2020/04/02
5530
阿里P9架构师简述从单机至亿级流量大型网站系统架构的演进过程
阶段一、单机构建网站 网站的初期,我们经常会在单机上跑我们所有的程序和软件。此时我们使用一个容器,如tomcat、jetty、jboos,然后直接使用JSP/servlet技术,或者使用一些开源的框架如maven+spring+struct+hibernate、maven+spring+springmvc+mybatis;最后再选择一个数据库管理系统来存储数据,如mysql、sqlserver、oracle,然后通过JDBC进行数据库的连接和操作。 把以上的所有软件都装载同一台机器上,应用跑起来了,也算是一
Java架构
2018/05/04
1.4K0
阿里P9架构师简述从单机至亿级流量大型网站系统架构的演进过程
如何理解 Scalability?
关注「前端向后」微信公众号,你将收获一系列「用心原创」的高质量技术文章,主题包括但不限于前端、Node.js以及服务端技术
ayqy贾杰
2020/01/14
2.2K0
如何理解 Scalability?
普元应用服务器高可靠方案
伴随着网络带宽的提升和移动终端的普及,现代的web应用平台几乎时时刻刻都在处理着来自用户成千上万的访问请求。在某些特定的场景下(如电商抢购、春运抢火车票等),这些web平台要承受瞬间暴涨的用户访问量。如何在高并发请求的情况下做到服务不瘫痪并且给与用户良好的使用体验,是所有web平台都要面临的挑战。构筑具备高可靠的web平台,是企业避免用户流失的重要手段,是增强自身竞争力的必要环节,具有十分重要的意义。
yuanyi928
2022/09/27
1.3K0
普元应用服务器高可靠方案
浅谈Web网站架构演变过程及各阶段所用的技术和架构设计(转)
  我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变。
wuweixiang
2019/03/12
2K0
浅谈Web网站架构演变过程及各阶段所用的技术和架构设计(转)
大型Web网站架构演变之9大阶段
我们以Java Web为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变。
Java编程指南
2019/08/05
6140
大型Web网站架构演变之9大阶段
图解:从单个服务器扩展到百万用户的系统
你开发了一个网站(例如网上商店、社交网站或者其他任何东西),之后你把它发布到了网上,网站运行良好,每天有几百的访问量,能快速地相响应用户的请求。
刘盼
2019/05/14
1.6K2
可扩展的Web架构和分布式系统(翻译)
原文:Scalable Web Architecture and Distributed Systems
早起的鸟儿有虫吃
2019/06/03
1.1K0
6000 字+,帮你搞懂互联网架构演变历程!
点击关注公众号,Java干货及时送达 作者:小M 来源:https://cnblogs.com/xiaoMzjm/p/5223799.html 前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变。 该系统具备的功能: 用户模块:用户注册和管理 商品模块:商品展示和管理 交易模块:创建交易和管理 阶段一、单机构建网站 网站的初期,我们经常会在单机上跑我们所有的程序和软件。此时我们使用一个容器,如tomcat、jetty、jboos,然后直接使用JSP/servlet技术
Java技术栈
2022/06/08
3210
6000 字+,帮你搞懂互联网架构演变历程!
架构设计--互联网架构演化
我们常见的大型网站,如百度、淘宝、京东等,都是一个分布式系统。这么复杂的系统也不是一天建成的,每个系统都经历了漫长的演变过程。
爱敲代码的猫
2019/10/16
6500
架构设计--互联网架构演化
大型网站的自强之路
1、大型网站的自强之路 当年马云筹办阿里巴巴的时候并没有说我要做个大型网站,搞个双11,成交额做到千亿级别;马化腾也没有说以后我要做个通讯工具,让13亿乃至更多用户都成为我们的用户……我们现如今看到的各个大型网站或产品都是一步步踏踏实实走过来的,在各种坑和故障中成长起来的。 1.1、一台电脑就是服务器 做过课程设计或者毕业设计的计算机相关的同学都应该有过搭建项目的经验。画一堆界面,结合js和后台实现数据的展现,当然还要有数据来源——数据库,启动一个容器比如tomcat,那么我们就可以在本机上访问我们的网站了
JackieZheng
2018/01/16
8130
大型网站的自强之路
『学习笔记』如何使用 WebLogic 实现负载均衡
🎈今日推荐——https://cloud.tencent.com/developer/article/2465656
数字扫地僧
2024/11/14
2270
『学习笔记』如何使用 WebLogic 实现负载均衡
Java高并发:在AWS上扩展到数百万用户的系统设计
除非你有AWS的背景或者正在申请AWS的相关职位,否则在AWS上的实现细节不需要了解。然而大部分在这里讨论的原理可以应用到除了AWS以外更通用的地方
用户1289394
2020/11/06
1.4K0
推荐阅读
相关推荐
【万人收藏】Twitter工程师从0到1教你设计百万级并发应用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档