前往小程序,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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
linux基础命令介绍三:文件搜索及其它
find是一个非常有效的工具,它可以遍历目标目录甚至整个文件系统来查找某些文件或目录:
用户5030870
2019/04/11
1.7K0
MySQL slow_log日志解读
MySQL慢查询日志用来记录在 MySQL 中执行时间超过指定时间(long_query_time 参数控制 )的查询SQL语句。通过慢查询日志,可以查找出哪些查询语句的执行效率低,以便进行优化。
Power
2025/03/01
1600
Hi, SRS 5.0!
随着志宏大神合并完DASH的功能,SRS 5.0正式完成功能,进入一年左右的稳定性提升阶段,预计在2023年底正式发布,现在已经可以开始体验SRS 5.0的Alpha版本了。 SRS 5.0 Alpha 0 Features 下面是5.0新增的功能列表: •  优化SRT,支持协程原生架构。#3010[1] •  支持amd/armv7/aarch64多CPU架构的Docker镜像。#3058[2] •  Forward增强,支持动态Forward,可以灵活定制转发策略。#2799[3] •  GB281
Winlin
2022/11/28
1.8K0
Hi, SRS 5.0!
新特性解读 | MySQL 8.0 通用表达式(WITH)深入用法
资深数据库专家,专研 MySQL 十余年。擅长 MySQL、PostgreSQL、MongoDB 等开源数据库相关的备份恢复、SQL 调优、监控运维、高可用架构设计等。目前任职于爱可生,为各大运营商及银行金融企业提供 MySQL 相关技术支持、MySQL 相关课程培训等工作。
爱可生开源社区
2021/06/16
1.1K0
Pandas处理时间序列数据-入门
在pandas中,时间戳(Timestamp,通常指的是自1970年1月1日(UTC)以来的秒数)是用于表示特定时间点的数据类型。它是pandas库中用于时间序列分析的一个重要组成部分,基于Python的datetime模块但提供了更丰富的功能。时间戳不仅包含日期(年、月、日),还包含时间(时、分、秒,以及可选的毫秒、微秒和纳秒)。
皮大大
2024/09/05
3460
【数据分析可视化】时间序列数据的采样和画图
import numpy as np import pandas as pd from pandas import Series,DataFrame # 生成时间索引的Series序列 t = pd.date_range('2019-01-01','2019-12-29') t DatetimeIndex(['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04', '2019-01-05', '2019-01-06', '2
瑞新
2020/07/07
9910
【数据分析可视化】时间序列数据的采样和画图
AKShare-利率数据-主要央行利率
本次更新全球主要央行的利率数据接口,主要是增加了预测值字段,通过返回为规范的 pandas.DataFrame 格式,以兼容 HTTP 接口。
数据科学实战
2022/01/12
6520
AKShare-利率数据-主要央行利率
AKShare-期货数据-南华指数
本次主要更新和重新设计了之前的南华指数接口,包括收益率指数、价格指数、波动率指数。
数据科学实战
2021/12/28
1.2K2
来自 Vue 官方团队的 57 个技术分享
最近在看 Vue 团队成员的技术演讲,从中能了解到他们的设计思考以及最佳实践,看完一场收获颇多。
Leecason
2022/07/13
1.5K0
来自 Vue 官方团队的 57 个技术分享
Python数据分析之Pandas(三)
: | -----: | ------: | -----: | --------: | | 0 | 1 | 1193 | 5 | 978300760 | | 1 | 1 | 661 | 3 | 978302109 | | 2 | 1 | 914 | 3 | 978301968 | | 3 | 1 | 3408 | 4 | 978300275 | | 4 | 1 | 2355 | 5 | 978824291 |
yuanshuai
2022/08/22
1.5K0
Python数据分析之Pandas(三)
程序员应该掌握的一些 Linux 命令
作为一名后端开发,跟服务器的交流必不可少,刚好最近跟服务器打交道比较多,所以就汇总整理一下 Linux 下那些程序员经常需要使用的命令,掌握这些命令基本上可以在 Linux 系统里面横着走了(我明显是说大话了)
phoenix.xiao
2021/06/29
6120
【亲测有效】Python+IDM多线程加速批量下载ERA5数据
本文介绍了如何通过Python脚本和Internet Download Manager(IDM)软件批量下载ERA5数据。
自学气象人
2023/01/31
6.8K2
【亲测有效】Python+IDM多线程加速批量下载ERA5数据
AKShare-宏观数据-中国香港宏观
本次接口更新主要修复了之前接口命名的问题,通过规范了对返回结果的数据格式并修改了相应的文档。请升级 AKShare 到 1.2.60 版本使用。
数据科学实战
2022/01/12
9.2K0
AKShare-宏观数据-中国香港宏观
关于 ZoomEye-python 更新这件事
不知道大家是否还记得 Heige 的这篇文章 《使用 ZoomEye 寻找 APT 攻击的蛛丝马迹》,Heige 在文章中阐述利用 ZoomEye 开放的历史数据 API 接口尝试追踪 APT 的案例。那篇文章虽然过去很久了,但是仍然具有参考价值。为了让广大的安全研究者能够更简单、更方便的实现这些类似的操作,于是在 ZoomEye-python v2.0.4.2 中新增加了 history和clear 命令。
Seebug漏洞平台
2021/04/07
4270
关于 ZoomEye-python 更新这件事
ubuntu过期版本软件源[通俗易懂]
参考: https://blog.csdn.net/snaking616/article/details/52966634
全栈程序员站长
2022/11/04
7560
Python中的时间序列数据操作总结
时间序列数据是一种在一段时间内收集的数据类型,它通常用于金融、经济学和气象学等领域,经常通过分析来了解随着时间的推移的趋势和模式
deephub
2023/02/01
3.6K0
跑一个肝癌的单细胞转录组10x数据定量流程
在 https://www.ebi.ac.uk/ena/browser/view/PRJNA793914 可以看到这个项目详情,而且前些天我们演示了如何下载这个项目的fastq格式的测序数据原始文件,详见:aspera的高速下载确实很快吗。但是从网络下载的单细胞转录组数据文件的样品名字别抹掉了,变成了顺序编号的id,而且呢,文件名字并不符合规则:
生信技能树
2024/03/06
3030
跑一个肝癌的单细胞转录组10x数据定量流程
飞速搞定数据分析与处理-day6-pandas入门教程(数据清洗)
这个并不是书籍里的章节,因为书籍中的 pandas 节奏太快了,基本都是涉及很多中高级的操作,好容易把小伙伴给劝退。我这里先出几期入门的教程,然后再回到书籍里的教程。这几章节作为入门,书籍作为进阶。
用户10002156
2023/08/07
2600
飞速搞定数据分析与处理-day6-pandas入门教程(数据清洗)
Python数据分析之Pandas(一)
-: | :-----: | :----: | :-------: | | 0 | 1 | 1 | 4.0 | 964982703 | | 1 | 1 | 3 | 4.0 | 964981247 | | 2 | 1 | 6 | 4.0 | 964982224 | | 3 | 1 | 47 | 5.0 | 964983815 | | 4 | 1 | 50 | 5.0 | 964982931 |
yuanshuai
2022/08/22
1.6K0
AkShare-股票数据-分红配股
作者寄语 新增所有股票的分红历史数据和单个股票的分红配股历史和详情数据接口。 更新接口 "stock_history_dividend" # 历史分红 "stock_history_dividend
数据科学实战
2020/05/20
1.2K0
相关推荐
linux基础命令介绍三:文件搜索及其它
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档